I work everyday doing J2ME, and you can do really powerful things with it in phones.<p>Main problems: You have to re-invent the wheel all the time. J2me, is basically Java 1.2 with lots of things stripped out. No string tokenizer, no iterators, no collections, etc. etc.<p>This actually makes it frustrating (re-invent the wheel all the time), yet challenging fun at the same time (it is not bloated).<p>THe main problem of J2ME is it's very crappy implemetation from OEM, where every fricking manufactor decides to implemt it differently, slapping their apis, and making applications not work on most phones without some major effort.<p>Carriers, deciding to bllock APIs, as basic as socket connections, media players, etc. and you can't use them without their "permission", aka digital signatures. Ah, and if you are not their "preferred" partner (i.e. surrender half of your revenue to the carries), you will not get this certificates. Which stilfes inovation, and drive small developers, or early startups out of business, unless they are in bed with the carrier.<p>So, after years developing with J2ME, I can say that it has a leased time. It is not easy to develop for, very very fragmented, and it's power stiffled by the carriers.