Introduction and History of Awesome J2ME

Introduction to J2ME

J2ME is a Java specification designed for old keypad phones and PDAs. MIDP, which is built upon CLDC, is used to create Midlets, which have .jad or .jar extension, and run on platforms like old keypad phones, Symbian and PDAs. MIDP is supported till Java ME SDK 3.4.

To get started with J2ME, do the following steps: set up a Windows XP virtual machine; download and setup JDK; Download Java ME SDK 3.4; Install Netbeans 6.1 and follow the instructions to add J2ME SDK as platform.

While you can use other operating system like Linux as well, but I recommend Windows XP because it was the intended platform. And Windows XP supports other development tools, SDKs as well. I recommend airgapping, removing internet connection, of VM, and atleast a seperate user if using Linux.

You can test your setup by compiling and running following code:

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class HelloMIDlet extends MIDlet {
	private Display display;
	private Form helloFrm;

	public HelloMIDlet() {
		helloFrm = new Form("Welcome To Awesome J2ME!");
	}

	protected void startApp() {
		display = Display.getDisplay(this);
		display.setCurrent(helloFrm);
	}

	protected void pauseApp() {
	}

	protected void destroyApp(boolean unconditional) {
	}
}

As you can see, functions like pauseAPP, destroyAPP, startApp are necessary, and must be decelared.

In Defense of J2ME

Some people were criticizing J2ME for being too slow and restrictive.

While I agree with some of their criticisms. But there was no other alternative development environment that would work on devices with different OSes, screen sizes and hardware.

Java was widely used, familiar. JVM provided much needed compatibility between different devices.

If C or C++ were standard then development would be much harder. Due to manual memory management, ensuring compatibility with vastly different devices. The development would require using vendor specific APIs and SDKs, which may not be available to layperson or require license.

Even on Symbian, in which C++ was available, many preferred J2ME until QT was introduced in S60.

Despite all that J2ME has stood test of time and even influenced future platforms like Android, which also uses Java.

History Of Awesome J2ME

Earlier there was a chronological note on history and backstory of Awesome J2ME. But I felt like it was too focused on me. There was also a section on my reverse engineering projects on DOS. I now find DOS unrelated to the topic. I consider Awesome J2ME as a community project, hence I have removed them.

Though a short summary is there. In case you want more info, please go through the Git log or contact me.

Awesome J2ME was created on 2023-07-13 as a public GitHub list from a private draft.

On 2024-07-24 I submitted pull request to the main Awesome repository. It passed all 33 automated checks on the first try. But it was not merged until 2025-05-15.

At the time of analysis there were total 669(38 open, 631 closed) pull requests for submission of a new list. The criteria whether a pull request for submission of list is determined by presence of codeword "unicorn", which is required to be included in a sperate comment. The guidelines read To verify that you've read all the guidelines, please comment on your pull request with just the word unicorn. Query Archive.

At least 364(23 + 341) of them did not pass all the checks in the first run. This data was obtained by searching the pull requests which contain the maintainer as one of the commentor and his standard maintainer's comment "guidelines closely enough" query archive

So even with the most conservative estimates, the "rate is 54%. This excludes the pull requests where maintainer didn't post a comment.

On 2025-04-10, Awesome Symbian was released. While J2ME can be used to create software for Symbian as well source, but I feel like it deserves it own Awesome list focused on it's own native C++/QT environment.

I am very thankful to the J2ME community and everyone else for contributions, promotions and giving it a star.