As for Java on mobile: there are projects that are going that route. I'd wait and see before I postulated whether this is a good idea or not.
I'm sure you've seen "Java: Please Wait..." on tiny mobile screens with famous Java logo (cup of coffee). I am yet to run into "Please Wait: Objective-C..." screen on the iPhone.
I wasn't talking about J2ME. In my opinion J2ME is utterly pointless.
The same may not apply for other projects. I for one spend most of my time worrying about IO, availability and how to best take advantage of multiple CPUs and cores. In this, C++ isn't exactly giving developers anything for free (concurrency still not even being part of the language).
As for Java on mobile: there are projects that are going that route. I'd wait and see before I postulated whether this is a good idea or not.
I don't really understand how Vista fits into this discussion at all. In my opinion, Vista is the result of developers being paralyzed by the sheer weight of their legacy code and interoperability with legacy code. Completely different issue.