Java has certainly come a long way over the years. Sun Microsystems believes that C++ will be a thing of the past and that Java will take over. It's best quality is that a program can be written for PC, Mac and Linux without any sort of code changes. It can also, as we see with Minecraft, be easily used to write a browser based game.
While Java has improved in both it's speed and 3D capability, it's still outmatched. C++ or C code compiles just as well on Mac. The issue is that Java still needs to get at the graphics hardware somehow, and especially with graphics code, the libraries will still probably be written in C anyway. Since most codebases abstract the low-level platform-specific stuff away anyways, the only real gain for Java is a virtual machine, which is also it's downside.
Java has improved it's speed to the point where it's not really an issue anymore. The math speed between Java and C++ is about the same. The problem is that Java is a freaking memory hog and that you can't get at the processor as easily.
I'm excited about Java's future, but for high end game development, it's just not there yet. It's good for cell phones, cross platform capability (where performance isn't critical), and it's ease of use compared to C++, but that's about it.
Why would I use XNA? The same reason Notch chose Java, familiarity. I don't have the experience to pull together my own directx/opengl library to do this game from scratch. C# has it's pro's/con's as well, but I believe it's capabilities outmatch that of Java's any day of the week and twice on Sunday. Not only that, but it can be simultaneously developed for PC, Xbox and Zune at the same time, and those are all very popular gaming platforms.
"If I have seen a little further it is by standing on the shoulders of Giants" - Isaac Newton
Current Project:
http://strewnfield.wordpress.com/ (Last updated 06/11/09)