I've been programming for over 30 years, and I've used C and assembler and worked on embedded systems and Windows and UNIX machines at different times. I'm using Delphi currently for a long-running legacy project, but I'm also involved with a newer project that uses Java. I'll be honest - my focus is mainly on Windows machines for multimedia playback currently, and that's part of my bias. Java's certainly not my strongest language - I'm dangerous, and sometimes don't know my limits.
I find lots of interesting things in Java - built in types and functions that make some things easier, plus lots of free tools and toolkits to address different problems.
However, whenever I start to get to something "specific" - play a video file, or start with some database work, or dealing with more Windows-centric functionality (services, registry, messaging, etc.) - suddenly things seem to be "hard" or "awkward" to do.
Playing a video file is one example. Java Media Framework seems dead. There doesn't seem to be a lot of effort in the Java world to support multimedia, particularly in the "write once, run everywhere" mentality that surrounded the language initially. If I could write one app that ran on Windows and Mac and Linux, it would be worth the hassle to some extent. But I can't. I realize my Windows app won't work on a Mac or Linux, but it was a LOT easier to write.
UI stuff seems similarly "stilted", at least to me. The Swing UI for the project at work is clunky. Controls seem strange - not quite Windows, not quite Mac. They can be figured out, but they feel "off". It's maybe got something to do with the programmers - we're winging some of it based on Google searches and looking at our Java reference books and tutorials. But it's just "weird". Coding for the interactions seems awkward (at least in Eclipse, without using an sort of visual editor). We get oddness in behavior between Java versions (1.5 vs. 1.6, etc.).
Am I alone in thinking that Java suffers from having to be sort of a "lowest common denominator" runtime environment in order to try and run across so many possible target environments and platforms?
Not trying to start a war ... I'm working on learning more about Java and filling in the holes that may be getting in my own way. But it sometimes seems that understanding the underlying philosophy and design decisions for a language explain the implementation that you see.
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
Originally posted by Louis Wang: I've seen a cool multimedia desktop application in java: SimpleCenter.
I'd not heard of that. But it looks like it's Windows only. I'm going to take a look at it, because it looks interesting. I'm not saying you can't do really cool stuff in Java. It's all ones and zeros, eventually - the "cool" and "clever" bits are in the neurons of the people creating the software. I'm more suggesting that Java's philosophy of wide-spread runnability (unless I'm misinterpreting that) holds it back, because it's hard to make something work universally unless you write everything.
I remember back in the day, when I was developing in C (and I'm sure I have a couple of Herbert Schildt books around from that era still!) - while there are C compilers for everything, you needed one for your architecture, and you knew that you couldn't count on identical libraries between platforms. "Portability" was a real issue, to be sure. But there wasn't that promise that it was coming, either.
The desktop really isn't Java's strength; its strong suit is on the server, where servlets, JSPs, web services and EJB-based applications can all be transparently migrated from Windows to Linux to Solaris to HP to what-have-you; the zero-compile portability promise is really fulfilled there.
But the desktop is another story, especially for the sorts of things you want to do. I think Java does a damn good job for portability of meat-and-potatoes desktop apps, and in JDK 1.6 the JDIC stuff has made it even better. But for serious multimedia and other specialized applications, the truth is that it's simply an unsolved problem so far. If there was some other solid cross-platform multimedia library to serve as an existence proof, you might be able to say Java's lack of one is due to being spread too thin, or incompetence, or whatever -- but there's not.