2010-07-16

Java applications on the desktop

When it comes to discussions about programming languages on forums and newsgroups, one argument against Java is that there are quite no Java applications for the desktop.

This is definitely not true. I have looked what Java applications I am using (or used a lot in the past), and here is a list:
And of course, if you are a developer programming in Java, JavaFX, C++, PHP, Python or Scala for example, then you probably use NetBeans or Eclipse - both very popular IDEs (integrated development environments) are written in Java.


There are many, many Java desktop applications out there, look for example at javadesktop.org. You can see the wide area where Java is used on the desktop at geertjans blog here for example or at the NetBeans site here.

One advantage of using Java at the desktop is that you can choose between two core different ways: Swing or SWT. While SWT tries to use the OS specific widgets (to look more like the original OS and be faster), Swing does render everything itself. So SWT is a little bit faster and looks more like OS, but Swing is more flexible (more widgets available) and you can easily use different look and feel / themes (there is also an OS like). In both cases you can develop modern Java desktop applications that look nice and integrated with your OS.

The disadvantage of using Java on the desktop - I will be honest - is startup speed. Once started, SWT and Swing applications behave fast - probably not as a native Gnome application for instance but really - it's fast enough for the user. That startup time is still an issue you will notice mostly, if you write small tools as Java desktop applications. For larger ones it is less annoying because those you don't open and close all the time. If you open the application and tend to keep it open you will have no problem. If you open and close the app frequently then it may become an issue. Same applies for small commandline tools - writing those in Java is maybe not the best option. Anyway, really annoying is only the first start of the first Java application after reboot when the Java runtime is not in the cache yet. NetBeans for example (which is a big Java application) needs 12 seconds on my machine (a year old) when the Java runtime is already in the cache. Freemind is a smaller application and takes only 5 seconds to startup which is acceptable.

If you look also at server-side then ... what should I say .... the world is full of Java applications - too much to cover here (and of course for many websites or web applications you often can't really say from outside what is used behind the scenes).

Related post: Popular Java myths, The future of Java.

2 comments:

Anonymous said...

Good post, you forgot to mention jDownloader, most people claims it is the best download manager, Thanks to jD the jre is installed in a lot of machines. And is true, small aplications have no sense in Java, the JVM initialization is not trivial, it takes time (and RAM...). Maybe modularization can help with all that.

Leila @ Qoppa Software said...

Hi Martin

Thanks for the post.

We also developed a desktop application in Java (Swing). It's called PDF Studio and is similar to Adobe Acrobat:

http://www.qoppa.com/pdfstudio/

Start time is no too much an issue for us as most other similar apps out there are advanced and also take time to start. Our app can be a little slower when it comes to rendering graphics compared to native apps.

The Mac community really doesn't like to rely on Java for end-user apps, at least the Mac reviewers, users seem to be totally fine.

It is at the same time challenging and easy to be cross-platform using Java. It's easy to be there fast but it's tough to be as user friendly as a native app. You have to work at it constantly (installers, file browsers, looks, communication with native apps, etc...).

We have found a few look and feels that are pretty solid on all operating systems such as Nimbus and Substance.

I think what users enjoy most is the ability to buy one license and use the same app on multiple operatings systems.

Leila