Development tools

The kind of J2ME development environment you use has a big impact on how productive you are (and that relates directly to how much fun you have developing). I’m not going to list all available J2ME IDEs and give you pros and cons, I’m just going to tell you what I think is the best solution. Also, I must tell you that I’ve only been doing J2ME development on the windows platform (and it has been kind of an industry standard to develop J2ME games using windows, but that might be changing), if you’re on another platform, don’t let that stop you. However, these tips are more for the windows user.

After trying out a lot of different IDEs, such as JBuilder and Eclipse, and also the standalone Wireless toolkit from SUN (the WTK), I’ve finally found the IDE that works best for J2ME development (according to me anyway). It’s free, it’s fast, it’s easy to use and it’s still packed with features. It’s the Netbeans IDE originally developed by SUN, now a open-source project with a large community around it.

Netbeans is easy to install and configure. It runs fast (you can’t complain about Java app performance anymore), it’s flexible and really intuitive, it has the best “function insight” and “code completion” features I’ve used. It has great preprocessor functionality which means you can have different code blocks for different target platforms within the same source files, that really makes it easier to develop for different phone brands (with all their quirks and differences) at the same time. And above all, Netbeans makes it really fun to write code!

Netbeans has a “Mobility Pack” addon that you install to add all features needed for J2ME development. A copy of Suns Wireless Toolkit is included, but you don’t need to worry about that, everything you need is accessible from within the Netbeans IDE. Netbeans also includes a version of the Proguard obfuscator (in my opinion, the best Java obfuscator/optimizer around, more on that in the optimization section) and obfuscation is easily enabled in your project settings.