Ben Hammersley had an article a few days ago in the Guardian about games on your mobile phone. He's right on the mark about mobile Java:
Despite their pro-Java bluster, however, the phone manufacturers aren't helping anyone. While they may be proud of their current range - phones such as the Nokia 7650 are amazing bits of engineering - people are already beginning to notice their limitations, especially when contrasted with their ideas about precisely what they want to do with these devices.
For a start, the developers tell me, the way Java has been installed means the programmer cannot access any of the bits of the phone that actually make it interesting. From a Java program it is impossible to access the camera, the address book, or - in phones that have it - Bluetooth.
Nor can an application send SMSs, or talk to any built-in GPS system. In many phones, you can't even get the phone online from a Java application. The promise of interesting location-based games and applications is pretty much shot through, unless the developer writes the application in another language and targets it at one particular phone.
The whole point of using Java, with its write-once, run-on-any-device ideals, is somewhat lost when you talk of anything more ambitious than a really simple game. Even for the simple stuff, development is made harder than it should be: although every phone has a different screen size, button configuration and sound capabilities, there is no direct way for a program to find out what device it is sitting on.
He's got the whole idea down pat - I can't for the life of me understand why Sun went down the same disasterous path as Applets. Over-promoting the technology with massive limitations. It's nice to know you're not going to get a virus on your phone. It's NICER to have a technology that's actually useful.
I fired up the Symbian emulator last night and went through some of the documentation both locally and online. It looks like Symbian 7.0 (the next version of the OS - the Nokia 7650 runs on 6.0, and 3250 on 6.1) wants to relegate Java to only the MIDP profile like Nokia's Series 60 does, but I'm not sure. It depends on what's included on the phone, but in the EPOC folders in the Series 60 SDK there were a bunch of those Java classes that allow access to all the local APIs. Here's my thought: If you could package your Java app up like a normal native-language application instead of a J2ME Midlet, could you still use Java, but get around the MIDP limitations? Even if you needed to use the under-powered KVM, if you had low-level access to the hardware, then the Java apps could be great. A lot faster to develop than the C++ stuff. This could actually be possible, but Sun nor Nokia is promoting the idea because they're trying to sell their Midlet vision. We've seen it before with Entity Beans - a universally unpopular technology that's being pushed by Sun for god-knows-what religious reason.
I'll have to look into it some more.