Java ME

Java Platform, Micro Edition, also known as Java ME and J2ME, is an application environment made with low-spec embedded devices (i.e. cell phones) in mind.

Most feature phones since the early 2000s support Java applets in some form or another, but many of them (such as many Qualcomm-based devices) will only allow you to install OTA and won't recognize a .JAR file sent to the device (e.g. on a SD card or by using Bluetooth OPP/OBEX).

Programs for running Java apps
J2ME Loader for Android is an excellent application for loading and running Java applets on an Android device. It is extensive, easy to set up, and supports pretty much any Java ME applet that you throw at it, however the built-in games from earlier LG phones do not work.

KEmulator is a Java ME emulator for Windows that effectively runs the J2ME apps in a standard Java wrapper. Generally speaking it will run apps faster than a real phone from the time, but some apps don't work.

FreeJ2ME is a free J2ME emulator for desktop platforms. It doesn't have as good compatibility as KEmulator, but it has the benefit of being open source.

Good phones for running Java apps
There are a few important factors that determine whether a phone is good for Java apps:
 * How easy it is to load apps on the device (SD card or Bluetooth are usually preferred)
 * The screen resolution - a lot of games were designed for a specific screen resolution and may not scale well to unusual screen sizes.
 * How compatible it is with different standard (e.g. Mobile 3D Graphics) and non-standard APIs (e.g. Nokia UI).
 * Performance, which can be tested using benchmark apps such as JBenchmark or SPMark Java.
 * Personal opinion, of course.

BlackBerry
Most BlackBerry phones are good candidates for running Java apps as most of them can install Java apps off of an SD card or the browser.

Since they were for the most part higher end, they should have no problem running most Java apps and high intensity games.

(Tested: BlackBerry Curve 8330, BlackBerry Curve 9330, BlackBerry Bold 9650)

LG
Some Qualcomm GSM phones are good for playing Java ME games, as there are several ways of getting Java apps onto them. The easiest method is to send them over Bluetooth, and then it will automatically prompt the user if they want to install the apps sent. You can also have .JAR files on an SD card or internal storage and it will prompt you to install them. It's also possible to put them in a specific folder of the phone's filesystem using Bitpim, but this varies across phones.

(Tested: LG B442, LG B470, LG Shine)

Nokia
Older devices based on Series 40 v1 and v2 won't allow running apps sent with Bluetooth or through the MMC card, for those you'll need to download them via the WAP browser or use a data cable.

Newer Series 40 v3 and up phones can easily run games transferred via USB, Bluetooth or SD card without even having to install them. They have decent Java performance too.

Symbian Nokia phones also natively support Java applets and will work for running Java games. For newer Symbian devices, you can use JavaResizer to scale old, low resolution games to larger screen sizes.

(Tested: Nokia 5310 XpressMusic, Nokia 6126, Nokia 6650 fold, Nokia 7376)

Sony Ericsson
A100 Platform and A200 Platform Sony Ericsson devices will automatically install any .JAR file that is sent to it. They are generally compatible with most Java games, and have good 2D performance, but may stagger in terms of performance on heavier 3D games.

(Tested: Sony Ericsson Z520, Sony Ericsson Z750)

Samsung
Older Samsung phones does not allow sideloading apps using Bluetooth, USB and/or memory card, for those you'll need to download apps by using the WAP browser, and/or using a data cable.

Newer Samsung phones (2009 and up) allows sideloading through Bluetooth, USB and/or memory card. Most Samsung phones have decent Java performance too.

(Tested: Samsung GT-S5603)