tags:

views:

225

answers:

9

Hi,

I've been asked to write a cross-platform desktop app in Java. Targeted platforms are Windows/OSX/Linux.

I learned Java 1.1 1997, and did a few small utilities and applets using the the AWT library. I've done nothing with it since.

What modern technologies and libraries should I use for this project? I'm just looking for a list so I can follow up with Google. There is a lot of java stuff out there, and it is difficult for an outsider to make sense of it all.

Also, do you have any broad tips on distribution, installation and auto-updating?

To give you an idea of my background, I've been writing complex desktop apps since 1988 in C, C++, Visual Basic, Delphi and C#. Any tips you give me would really help me get a running start on this project.

Thank you very much for your help.

EDIT: I will be doing a lot of custom controls, if that makes a difference.

+4  A: 

I would start with Swing and SWT, because the first decision you will need to make will be to pick one of them, and it probably won't be feasible to switch later.

There are a lot of other general-purpose libraries that may be useful, e.g. Guava and Apache Commons Collections, but those can be mixed and matched so that decision is not so critical.

finnw
+1, Swing/SWT is _the_ decision to make - I'd go for SWT myself. (Unless you need some other UI framework...).
Ninefingers
I will be doing a lot of custom controls, if that makes a difference.
NXT
I'd go for swing, there is ( in my opinion ) much more information/resources in the internet than SWT.
OscarRyz
Shouldn't JavaFX also be an option? From what I've heard of it, it's what I'd be using now.
Bill K
+1  A: 

SWT is a library you could use. And Eclipse for IDE.

True Soft
A: 

Apart from Swing, SWT and the NetBeans platform there are a few other words you should google :)

  1. JIDE (components)
  2. SwingX (components)
  3. Substance (Look n Feel)
  4. FEST (automated testing framework for swing)
  5. JXLayer (decorating components)
willcodejavaforfood
+3  A: 

Basic Decision: Swing vs. SWT vs. JavaFX (I'd go with this, possibly combined with Swing).

As for the "soft" other aspects (in addition to what was already mentioned):

netzwerg
A: 

Also, do you have any broad tips on distribution, installation and auto-updating?

Java Web Start is a good solution for this.

Michael Borgwardt
I have to say I've found Web Start to be a miserable thing to work with. Before we stopped using JWS, the most frequent category of user complaint we had involved problems with it. We provide a Mac bundle, a Windows installer, and a Linux tarball now, and have virtually zero installation complaints these days.
uckelman
+2  A: 

Java has changed in several of important (design affecting) ways, you should make sure that you are aware of the new language features that have been introduced since 1997, such as generics.

Most changes/additions to the Java language should feel familiar since C# has many of the same features.

If you find yourself longing for C# lambda, check out LambdaJ

Other than that most important things have been mentioned, so Ill give my personal opinion on them:

  1. I would say use Swing over SWT

  2. I would suggest that you look at both Eclipse and Netbeans to see which environment feels more comfortable to develop in. But I think you may find more similarities between Visual Studio C# and Netbeans, than between VSC# and Eclipse

  3. If you need advanced GUI components check out SwingX first.

Additionally, other than Stack Overflow, a great resource is Java2s, Java2s - Swing

instanceofTom
A: 

I would strongly recommend looking at Griffon. It is a Java Swing based library that brings the plugin models and convention over configuration model from Grails to the Swing world. It does mean you would be coding in Groovy and not Java but that should not be a problem.

For a new application this would be a good choice. Groovy and Griffon run on the Java Virtual Machine and can be deployed cross-platform.

Chris Dail
+1  A: 
OscarRyz
I am renewing my safari.oreilly.com subscription just so I check out this book.
NXT
A: 

Spring Rich Client project is a complete Swing-based framework for creating Spring-based desktop applications, similar to Eclipse and NetBeans. i use it because it dramatically reduces the amount of boiler-plate code needed.

Stefan De Boey