I like Jonathan Schwartz a lot, but I think that unless some drastic changes are made to Java, the move to JAVA as Sun's ticker symbol is going to be as relevant as changing it to COBOL. I'm using Java less and less as time goes by, not more - the heyday of the language and platform has come and gone, and IMHO, it's going to continue to fade from relevance with increasing speed.
That doesn't mean I don't use Java every day still. There's tons of servers out there with services I rely on whose back end is running on a Java server of some sort. And my phone has at least a dozen must-have apps and games that are all written in J2ME (Google Maps, Instango Jabber client, MidpSSH, MobiTV, Opera Mini, Tetris, Lumines, various GameJump games, and more). Lately I've been playing Scrabulous, which is actually a Java Applet - first one I've used in a long time.
But in general Java is yesterday's technology.
As a user, Flash has supplanted Java in the browser, we've all seen that happen. On my Linux box, I use several C# applications and none that use the JVM (I used to use Azureus, but lately it's been freaking out and crashing (!!) so I gave up on it). On my server I only use a LAMP stack and would never consider a Java server-side app (like for my blog or Jabber server) - I just don't want to waste my server's resources on a bloated JVM.
As a developer, nowadays I would never consider Java for anything besides a very focused set of server processes to which it was well suited. The pain of dealing with Java, and the time/effort it takes to develop using it just isn't worth it to me. Yes, at one point Java was definitely a god-send. It rescued me from the Microsoft hell I was dealing with at the time (this is back in 1999) and opened up a whole new world of options, as well as lead me to Unix, etc. But many years have passed since then, and sadly Java hasn't progressed, and instead has become more and more obtuse and bloated with each passing year. At one point I thought I hated programming because I was just so sick it... It turns out I don't hate programming, I just hate programming in Java.
In fact, I'd say that many of today's current hot trends in programming are a direct result of a backlash *against* everything that Java has come to represent: Lengthy code and slow development being the first and foremost on the list. In Java you generally need hundreds of lines of code to do what modern scripting languages do in dozens (or less). The general up tick in interest in Ruby, Python and PHP during the 2000s all has its roots in programmers who had to work on one Java project too many, and were desperate to find something more efficient and less painful to use. You all know the story - less XML and cleaner, leaner code - and once you've experienced it, believe me, you won't go back.
I'd even speculate that the recent interest in Erlang is driven by these same forces. The same people who swore they'd never use Java again if they could help it are looking for a good replacement for it on the server. The one spot where the JVM has no real peers is in long running server-side processes that need to execute hard-coded business logic as scalably as possible. Despite the fact that the JVM is a resource hungry beast that's ponderously slow to start up and happy to eat as much memory as you can throw at it, it's still the only real game in town for this type of application... for now. The reason people are looking at Erlang is not because its beautiful syntax, great documentation, or up-to-date libraries. Trust me. It's because the Erlang VM can run for long periods of time, scaling linearly across cores or processors filling the same niche that Java does right now on the server.
Really, that right there should be a clear indicator of how ill regarded Java development has become that people are willing to embrace the insanity that is Erlang in order to avoid using it.
So what's the solution? Well, this is the problem. People have been tinkering with Java for years now, and there's still no hope in sight. There's something about the Java culture which just seems to encourage obtuse solutions over simplicity. As a Java developer, I was always so amazed at how difficult it was to use the standard Java Class Libraries for day-to-day tasks. Every app out there ends up having to include 20MB of .jars in order to get even the simplest functionality working because Java libraries are so low-level and incomplete. Having to write a loop to pull in bytes and assemble them into a StringBuffer myself if I want to get a web page is not only a pain, it's also incredibly short of implementing the HTTP standard compared to something like libcurl. Why is this sort of basic functionality missing from Java's standard install?
This is the sort of overhaul I'm talking about. Adding closures or not in the next version of Java is just a new coat of paint on a burning barn. Clean out the damn libs and make the language cleaner and leaner again is what's needed. I'd love to go back to the days of knowing that I only had to think about the JVM to roll out an app on various platforms and/or servers. And I loved the general security that the JVM's sandbox gave as well (who knows what sort of zero-day buffer overflow flaw is waiting in PHP ready to be discovered and exploited tomorrow?) But unless I know that I won't have to deal with libraries that barf on the smallest XML problem, or the need to write 200 lines of code to do simple Date calulations, it's not going to happen. For me or for many other developers out there.