java is pretty awesome. it has its flaws, like basically all the other languages and environments. probably the best part about java is there actually is different implementations of it, even openjre has a couple different runtime options. im pretty sure you can use gjc and compile native code.
also, the swing gui has gotten a LOT better. it now can use native toolkits to integrate better with the native system. swing on gtk looks pretty gtkish from last time i checked. and ive seen images of it on windows looking pretty good.
where it lacks is desktop api's. mostly it has no native java api's for 3d, gpgpu or video. you can use some opengl bindings or some media file libraries bondings but there is no java 3d api's or java video api's.