On a Java forum we can expect he majority to respond that such concerns are false, yet in even the few responses there is disagreement and indications these points are valid.
I suspect many of the responses might also be from people that do not have deployed Java applications. I’ve deployed over a half dozen Java utilities/applications and one major online game.
a) The JRE must be installed.
Any install that requires an extra step by the customer is one more step that can cause that customer to give up and not run / play that application / game. Installers such as Install4j can make this a minor issue. (So why doesn’t Sun distribute an installer with Java instead of leaving developers to have to search out an install solution?)
b) Code bloat - JRE is 15 Meg.
True, the JRE 1.4.2_05 is a 15 Meg download. We might argue that it only needs to be downloaded once, but that’s not true if the application is updated and thus requires a new updated JRE.
c) Frequently changing JVMs.
This is a problem. I had a nightmare experience with a 3COM switch with management software written in Java that [b]forced[/] an install of an older JVM trashing a perfectly well set up Java environment. I’ve had numerous customers that have had issues running Java software where the solution was to uninstall all JVMs and cleanly reinstall.
The simple fact is that applications (unless packaged with their own JVM) are at the whim of JVM versions and install issues.
d) Non-standard parts of Java.
Up until just a couple months ago Java 3D was not open source and was a cause of many headaches for many developers because we could not legally post a copy of it (due to export restrictions to banned countries) thus requiring pointing the customer to Sun’s website and requiring a separate install (good luck directing the naive customer to get this installed into your own copy of the JVM!).
e) Native compiling
This is very desirable. It allows small applications to be distributed as a single file and be reliably run without concerns about other software (JVMs, DLLs) changing.
And native applications do start up much faster than Java applications.
Heck, it’s not like we don’t have separate distributions of Java applications for Linux and Windows already! (OpenOffice is a perfect example)
f) jar extension hijacked
WinRAR and UltimateZip both hijack the .jar extension. This has caused me personally several flurries of e-mail exchanges with customers to solve the problem.
g) JRE start up slow
This is a subjective opinion. Personally start up speed is one of my biggest concerns with any application and it’s a flaw in Java that annoys me. Typically for a major application it’s not a real issue though. It’s just an annoyance.
Some responses have indicated WebStart is a better deployment method than using a Jar file. I absolutely detest WebStart and refuse to run ANY application that is deployed via WebStart.
Deploying via Jars (if the other issues were addressed) is an elegant and ideal solution. A single Jar file would be as good as a single EXE if the other issues didn’t exist. (Jar files can solve a lot of the classpath issues that plague Java)
I’ve had other developers express the opinion that a native compiler (for each platform) would be the number one most desired feature to add to the JDK. I agree, if Java had a native compiler (for both Linux and Windows) I wouldn’t be throwing away eight years of Java support and development and switching to another language.
When I started learning Java my reason for choosing Java was that I believed in it’s long term lifespan (after learning a couple dozen other languages I was tired of constantly learning new programming languages). Unfortunately Java hasn’t lived up to my expectations so after eight years of promoting and developing in Java I’m walking away.