Minor points first:
any productivity boost from Java is
hypothetical. The syntax is almost
identical to C++ so you're really
just banking on savings from memory
management and standard libraries.
The libraries have little to offer
games developers and memory
management is a contentious issue due
to garbage collection.
cross-platform "for free" is not as
good as you think because few
developers want to use OpenGL and
several key platforms probably lack a
good Java implementation or wrappers
for their native libraries, whether
for graphics, audio, networking, etc.
But mainly, the issue is backwards compatibility. Games developers moved to C++ from C and to C from assembly purely because the migration route was smooth. Each interoperates closely with the previous, and all their previous code was usable in the new language, often via a single compiler. Therefore migration was as slow or as fast as you liked. For example, some of our old headers in use today still have #ifdef WATCOMC in, and I don't think anybody has used the Watcom compiler here in a decade or more. There is a massive investment in old code and each bit is only replaced as needed. That process of replacing and upgrading bits and pieces from one game to the next is nowhere near as practical if you changed to a language that doesn't natively interoperate with your existing code. Yes, C++/Java interoperability is possible, but very impractical by comparison to simply writing "C with a bit of C++" or embedding asm blocks in C.
To properly supercede C++ as the game developers' language of choice, it must do one of two things:
- Be easily interoperable with
existing legacy code, thus
preserving investment and
maintaining access to existing
libraries and tools, OR
- Demonstrably
show up-front enough of a
productivity boost that the cost of
rewriting all your own code (or
reworking the interfaces into
reusable components that can be used
from that language) is more than
covered.
Subjectively, I don't think Java meets either of those. A higher-level language might meet the 2nd, if someone is brave enough to be the pioneer. (EVE Online is probably the best example we have of Python being usable, but which uses a fork of the main Python language, many C++ components for performance, and even that is for a fairly undemanding game in modern terms.)