Personally, I don’t like Java. I think cross-platform runtimes (including Adobe’s AIR) sacrifice UI because it gives the same UI to every OS, so cross-platform runtimes find a mediocre middle that will work on Windows, Mac and Linux.
It’s an even deeper problem than that. Even if you could give a single excellent interface, it’s still the same on all three platforms.
Windows and OS X have very different styles and guidelines for interface appearance, behavior, and layout. Their parent companies set the standards, and users expect them.
(As far as I can tell, desktop Linux has no widely accepted GUI guidelines or style [or users lol], so I’m ignoring it.)
By giving the same interface on Windows and OS X, you end up with an application that’s designed for one while looking and behaving badly on the other: Firefox and Thunderbird on OS X, or Quicktime and iTunes on Windows.
(Or you end up with Mac Office, which doesn’t follow any standards from either side and is impressively awkward and clunky to use.)
Some of my favorite OS X interfaces wouldn’t work well on Windows, such as NewsFire and Soulver. And some decent Windows interfaces would be awful on OS X, such as Winamp and Excel.
Interfaces need to be designed with their target platforms’ users and standards in mind instead of trying to force one interface into all contexts.