The best thing to happen to Java...
... is .NET.
I know it sounds a bit strange, but I really think that's true.
Before the .NET era, the world was divided between two groups: The USA and the USSR.
Ok, just joking: The programming world was divided between two groups: The VB group, and the Java group. There were some smaller groups, such as the Delphinians, the Perlians, and even some Cobolists, but the major ones where, undoubtly, the VB'ers and the Java-ists.
Those two groups almost didn't communicate between them. The Javaists regarded the VB'ers as novice programmers, whose programming skills are limited to dragging fancy UI object in their toyish RAD environment (of M$, of course!), while the VB'ers looked at the Javaists as some ultra-geeks who prefer hand coding the RDBMS itself, if that was possible, and who actually hand coded the whole OS.
Those two groups lived quite happily beside each other, and continued to grow and flourish.
And then came .NET.
Suddenly, the VB'ers exposed to java-like terms such as CLR (=JVM. Yes, I know you can't really compare them, but still...), MSIL (=Bytecode), OOP (=OOP), Patterns and Practices (=Design Patterns) and so on. While assimilating this huge pile of knowledge, it was discovered that there is some high-end language that has some of these features already - Java!
If, four years ago, it was almost impossible to "convert" a VB'er to the Java world, it is now much easier. The basic concepts are exactly the same. Of course, there are important differences, but it is not something you can't teach yourself in 21, or even less, days. All in once, the Java world gained a ten of millions potential developers.
And it looks like they know that. In a heated discussion in TSS.COM about the Current State of JSF (which is the Java's answer to ASP.NET), the following post appears:
"What I see happening is that non-gurus are literally driven off by the complexity and weirdness of JSF (and JSP custom tags and JSP expression language). The Java community is off on ivory tower framework tangents and losing sight of the simple elegance principles behind Java. Rather than competing with ASP.NET the web applications infrastructure is making Java LESS competitive and giving Microsoft a free ride with their existing developer customers who cannot begin to fathom what the heck is going on in Java web app land."
A few years ago, no one at Java Land would consider it important to compete with MS products. In fact, they may be humiliated just by mentioning it. But the .NET is a very legitimate competitor, and Java responds accordingly (or, more accurately, tries to respond accordingly.)
We saw this close relations recently in our company. We answered an RFP, and suggested using .NET in our solution. The customer liked our proposal, but wanted it to be a Java solution. Now, if we were in the VB6 era, this was the point where we would say "T'was nice to meet you. See you at the next project.". But since we were familiar with .NET, we felt quite comfortable migrating to Java.