The (Java) MIDlet Bible PART II


3. Introduction to using MIDlets

Now, let’s see how you can install (deploy) MIDlets on your Windows Mobile device and how you can use them. Fortunately, doing this is very simple.

First, make sure you do have a KVM on your handheld. If you don’t, install one. If you have a non-phone Pocket PC and want to use any MIDlet manager (except for IBM J9), make sure you install the SMS.dll and Phone.dll hacks and / or if you have a pre-WM5 device, you’ll need to choose from either IBM J9 or old versions of TAO Intent.

After this, your life will be pretty easy.

3.1 Two ways of deployment (installation): online vs. offline

In general, there are a lot of MIDlets available online. In general, if you click them on the Web from your Windows Mobile device (preferably, using a built-in Web browser), they get downloaded to your handheld and automatically deployed in your device. The same happens with JAR files you copy to your handheld and, then, deploy them locally by either making your KVM explicitly search for it or clicking it / pressing the Action button from a local file manager. In the following two subsections, I elaborate on these questions.

Note that, generally, there are two kinds of files you’ll run into: JAD files and JAR files. When you download a MIDlet to your desktop PC so that you can, later, deploy it into your handheld’s KVM, only download JAR files, not the JAD ones.

If there’s no way of directly accessing JAR files, only JAD ones (as is, for example, the case with the Opera Mini 4 beta download page HERE - note that you should visit it from a Wap-capable desktop browser (Opera), that is, NOT from IE!), the “Download high memory version” download link will download you a JAD file, not a JAR one. You can directly copy this file to your handheld but, then, it’ll need to have Internet connection to be able to download the JAR file referenced by the small JAD file. If you can’t guarantee this or prefer collecting the JAR files offline, do the following: open the JAD file you downloaded with a text / file viewer (editor) and look for the attribute named “MIDlet-Jar-URL”. Copy the URL after the colon (for example, to your desktop Web browser. Now, you’ll have direct access to the JAR file – you can already safely save it.

Note that some KVM’s support separating MIDlets into different folders. Some allow for selecting the folder at deployment time (an additional step in the deployment process; this is what, initially, the “root” screen stands for when deploying into Esmertec products), the others after deployment. (And, on the Nokia, as it has no MIDlet manager interface at all but all deployed MIDlets are listed as regular applications, you can use the system file explorer tools to move them elsewhere, in another folder. This is slightly different from the way MIDlets were handled or early MIDlet-capable Nokia phones like the N-Gage, where there was a separate folder for them.) Also see the “Possible to use folders for better MIDlet separation?” row in the main chart for more info & screenshots.

Also note that, during the deployment process, you will also need to let the installation continue, particularly when the given MIDlet isn’t signed with a trusted certificate. (The vast majority of MIDlets are like this.) This, in general, only means you will need to press the left softkey some times on both Windows Mobile and Symbian.

3.1.1 Offline: originating the deployment from inside the manager vs. doing the same from the outside

There are two ways of deploying a local MIDlet JAR file to your MIDlet browser. The easiest is the default way of just clicking / pressing the Action key while viewing it from a local file explorer tool. This, as long as the file associations are correctly set (which may NOT be the case if you install more than one KVM’s on your handheld – more on this later), will automatically invoke the JVM and deploy the MIDlet.

Another way to select the related menu item inside the given KVM is to search for JAR files in the local file system (for example, Menu / Install / Local with TAO and Menu / Install / Local Files with Esmertec’s KVM’s). Unfortunately, it’s pretty flawed with most of the KVM’s; for example, the lack of alphabetical sorting, some of them can’t display all the files at once if there are more than 200-250 of them, some are only looking in a given directory or have no search capabilities at all, which is the case with IBM J9. The latter, as it doesn’t allow for browsing the file system for a given JAR file, forces you to enter the full (local, that is, Error! Hyperlink reference not valid. ) URL of the JAR file, which is really a pain in the back. Finally, Jblend doesn’t offer any local file browsing / deployment at all – with it, you must initiate the deployment from any file explorer tool. The latter is “only” highly recommended with other KVM’s because of the other annoyances and bugs they have.

3.1.2 Online

This is much easier: you just navigate to the given page with the MIDlets online and just click the JAD (or JAR) files. Note that some KVM’s may not allow for installing Web-based JAR’s directly; with them, you will need to click the JAD file instead. This is in stark contrast with the local install: all the tested (non-disqualified) browsers allow for the direct installation of JAR files and no local JAD’s are needed.

3.2 Running the already-deployed MIDlets

After your MIDlet is deployed, you will need to click it from inside the KVM if it’s not started automatically: most current, recommended KVM’s ask the user whether the MIDlet should be started right after the deployment.

Otherwise, you just start the KVM environment (it’s, in general, in the main Start Menu / Programs folder (except for the HTC Kaiser / Tilt, where it’s in the Tools subdirectory there) and is called “Jbed”, “Java”, “Jeodek” or “Esmertec Jbed/Jeodek” with the Esmertec products, “MIDlet Manager” with TAO Intent, “Midlet HQ” with IBM J9 (linking emulator.exe) and “Jblend” with Jblend) and simply double-click the given, already-deployed MIDlet. With IBM J9, you must select the uppermost “Launch” menu item in Actions instead, after highlighting your MIDlet.

Now that I’ve made it clear it’s only Nokia’s (Symbian) MIDlet manager that puts the deployed MIDlet icons in the traditional Applications folder, you may also want to know whether you can also hack the Windows Mobile KVM’s to do the same. This, as you may have already guessed, also greatly speeds up starting a given MIDlet: you don’t need to start an additional layer of managers. The answer is: yes, with most KVM’s (except for Jblend), you can. Then, you won’t need to separately start the KVM interface to gain access to the deployed MIDlets. See the “Direct, system-level links (shortcuts) to MIDlets” row in the main chart for more info on this. Note that, as opposed to Nokia’s system-level links (or, for that matter, the way the excellent Palm OS emulator, StyleTap, works on Windows Mobile), all these links will have the same icon, unlike under Symbian – not that of the icon of the MIDlet itself. This is a definite disadvantage if you prefer looking for a MIDlet based on its icon and not its name / position.

3.3 Security issues

Unlike with native Windows Mobile (or Symbian) applications, you’ll always run into security prompts. Therefore, it’s worth knowing a bit about what they are all about.

Java programs, in general, put a lot of weight on security measurements. This is why they continuously prompt the user when they try to access “sensitive” resources like the Net or the local file system.

Fortunately, you can, in general (except for Jblend), easily get rid of this problem:

- if you have any of the Esmertec KVM’s, use the MIDlets signed by the MXit LifeStyle-signed JAR’s available in THIS thread. Note that I’ve separately linked in the most common non-game (games, in general, aren’t affected by these issues, unless they want to use Bluetooth) MIDlets you may want signed. Then, you’ll be able to set their security model for “Blanket”, which means you’ll never be prompted for permission. It’ll certainly be easier for you than with the default “Session” (you’re asked once per session – that is, after starting the MIDlet) and the even more restrictive “One Shot” security model. Incidentally, Jblend employs exclusively the latter model with accessing the Net; this means it’s pretty much useless for applications like Opera Mini or the Gmail MIDlet. This is particularly true with the Gmail client, where it prompts the user to allow going on upon downloading every single mail (header). That is, never use Gmail under Jblend.

- if you have a KVM where you can “hack” the security descriptor files (all Esmertec KVM’s and IBM J9 belong to here; TAO Intent is also said to be but the opinions do differ on the latter and I haven’t tested this hack), do the hacking to get rid of the annoying security prompts. See the “Security: Allow permanent Net access without prompting ("Blanket" security model, as opposed to "Session" / "Oneshot")?” row in the main chart for more info / links.

3.4 Runtime issues: concurrent (parallel) and background execution

The KVM’s slightly differ in how they handle concurrent execution of MIDlets – or, simply running something in the background. Some (TAO and J9) allow for the concurrent execution of MIDlets, while the rest don’t. This means the, otherwise, excellent Esmertec KVM’s will only run one MIDlet at a time, while the certainly, in most respects, inferior J9 and TAO Intent will run any number of them. TAO, in addition, also supports the in-environment switch between running MIDlets, unlike J9.

Support for parallel MIDlet execution can be very useful; for example, the Gmail MIDlet could continuously check Gmail for incoming messages, while, in another MIDlet, you could browse the Web. You can find some other uses for example HERE, in the comment section (the comments HERE are also pretty instructive and shed light on related issues).

The ability to execute a MIDlet in the background is also very important. Just an example: you start downloading a Web page in Opera Mini but quickly realize the download will take ages. In order to save time and do something useful in the meantime, you decide to minimize the Opera Mini task, do something else in another program and only return later, expecting Opera Mini has already finished downloading and rendering. All the tested WM and Symbian KVM’s support this kind of operation; the only exception is Jblend, which immediately pauses when it loses the focus. Incidentally, Jblend’s behavior also has some other consequences; for example, in no way can you use external character injectors to it (unless they’re continuously running and, therefore, don’t result in executing a new process; PQzII is one of these) and you will even have problems uploading Jbenchmark results to the server (because it constantly thinks the MIDlet has been paused and prompts you for resuming).

I also recommend Solnyshok’s excellent article for more information on the advantages of parallel execution of some MIDlets. Also note that the article contains an excellent hacking tutorial on how multiple instances of the same MIDlet can be executed at the same time.

4. The main chart

Again, this is where you’ll find most information. It contains an order of magnitude more information than the article you’re just reading in a well-condensed, tabular, easy-to-compare form, packed with tons of screenshots helping in finding out how a given feature should be enabled / used.

I’ve already elaborated on several (for example, security-related) of the rows this chart has; now, let me elaborate on the rest.

In the “Price / availability” row, as has already been stated, you’ll find where to get / download the given KVM from.

In the “Platform compatibility” group, I’ve listed three rows: compatibility with non-phone Pocket PC’s, Pocket PC Phone Edition devices and, finally, touchscreen-less Smartphones (abbreviated as SP’s).

As has already been pointed out, you MUST apply the SMS/Phone DLL hack explained in the Jeodek column if you have a phone-less, “classic” Pocket PC. Also, if you have a MS Smartphone (as opposed to Pocket PC’s), pay special attention to the compatibility remarks here as, unfortunately, not all titles are Smartphone-compliant or, if they are, you may encounter some problems when trying to run them.

The “Generic compliance with standards” group is more for techies: people that would like to know everything about the standards support of the given KVM. As can clearly be seen, the Nokia N95 KVM blows all the other KVM’s out of the water (in this respect too); this is particularly true of, under Windows Mobile, never (except for some very old and long-discontinued IBM J9-specific add-on projects I’ve elaborated on HERE) implemented, for, for example, multiplayer gaming (give a try to the MIDlet version of 3D Constructo Combat in multiplayer mode on even slower / older Nokias like the 6680 – you’ll LOVE it! The same stands for for example the famous Naval Battle: Mission Commander) Bluetooth support. The same stands for other goodies like support for camera: all WM KVM’s lack the support for it, as can clearly be seen in the “MMAPI Video-capture” cell of the “JVM Multimedia (JSR 135)” row. It could be VERY useful; see for example the posts HERE, seeking for support for barcode reader applications. Audio capture (which isn’t really supported by many apps either) is also pretty useful; see for example the TellMe MIDlet for a real-world usage example. Yeah, you can clearly see MIDlets are in no way for gaming only – there have a LOT of enterprise uses and are particularly useful when you have a lot of different platforms you need to quickly develop a business solution for!

In the “JVM Memory” row, I’ve listed the appropriate heap (free memory) size available for each KVM. The more, the better for running memory-hungry MIDlets – unless the given KVM uses dynamic (de)allocation of memory when the need arises. Then, it’ll be able to run even the most memory-hungry MIDlets (for example, a full JBenchmark category, in High Quality, packed into one JAR). Unfortunately, only Nokia’s KVM and Jbed support the latter. Also note that you can set the memory allocated for Jblend in the Registry.

Support for “JVM M3G”, that is, the Mobile 3D Graphics API is the dream of most Java MIDlet gamers. As can be seen, several KVM’s support it. (Speed, without hardware acceleration, is another question.)

The “JVM File Connection” group is also very important, particularly with applications like Opera Mini Mod, the unofficial (and, unfortunately, illegal; therefore, I cannot provide a link to it either) “hack” of Opera Mini, adding a lot of goodies like (pretty rude, but still working) page saving and IEM favorite import / export. These all require access to the file system, which, unlike with real Java, isn’t built-in or required by the basic standard. This is why so few WM KVM’s support it: IBM J9 with an additional hack (I’ve elaborated on the installation in the chart) and Jbed. Interestingly, some real-world tests were failed by Jbed, while IBM J9 passed all of them. The support for accessing the local file system is certainly a big plus with IBM J9 – one of the very few advantages of the environment, along with, for example, the ability to run several MIDlets at the same time.

The “Storage usage” group is very important because internal storage memory is doomed to fill up very quickly (especially with low-end WM devices only having 64M of Flash ROM – an example is the HTC s310/Oxygen WM5 Smartphone), particularly if you install sizable games (current games are 300-600 kbytes in size). In this group, I’ve explained the following:


  1. Where can a given MIDlet manager KVM be installed to – that is, can it be installed to a storage card? All of them can (note that we’re, mostly, dealing with XDA-Dev-created installers and hacks in here!), except for Jbed, which MAY require some additional manual file copying (also explained in the chart).

Where the deployed MIDlets are kept: This is also highly important. Fortunately, it’s only IBM J9 that is doomed to store the deployed MIDlets in the internal storage (I’ve tried to hack it to a card very hard – see my related article – but in vain); other MIDlet managers, when installed to a storage card, don’t. Note that, should Jblend and TAO be an OEM-installed KVM on your handset, you can still easily “hack” them to store their MIDlets on a storage card with a simple Registry edit.


In the “Text input” group, first, I’ve listed the copy / cut / paste capabilities of the KVM’s. One of the biggest problems with TAO is the complete lack of copy / paste functionality in any of its textboxes. This is a real pain in the back. Note that some 4pda users have implemented an external, not very reliable way of pasting text to the TAO textboxes (via MortScript), it’s still far from perfect.

Known text input-related bugs? Maximal editable pre-populated text area size?” elaborates on the text input-related bugs of the tested KVM’s. The most important of them (without any exception – not even Nokia’s implementation did fare well in this respect) is the text input areas’ limited size. This means the following: when you, for example, post an answer in a forum using the “QUOTE” button, you may end up not being able to enter anything and/or your answer getting completely deleted. In general, the threshold is between 1 and 8 kilobytes, depending on the actual KVM and the Web browser you use (Opera Mini fares far better in this respect than its modded version; I think because the latter uses 16-bit Unicode for input, which take up double the memory as the 8-bit input of Opera Mini.) Therefore, make sure you either quote VERY short answers and try to remain under the threshold or try not to quote anything.

In addition, TAO has a very bad, additional bug: if the quoted (and/or, original) text contains line breaks, you won’t be able to edit it at all.

I really recommend giving the test HTML page I’ve created for this test a thorough try to see what restrictions there are, whether your input is retained (after you exit the edit mode) etc so that you can be absolutely sure you don’t mess up anything when you do start filling in Web forms or post to forums with Opera Mini (Mod).

The “Display” category contains information on the usage of font smoothing technologies like ClearType (also see THIS request). As can clearly be seen, it’s only when using the smallest character size and only with some KVM’s that there is font smoothing (with OM4b2)

I’ve devoted two separate rows (and a lot of screenshots) to demonstrate the font sizes of Opera Mini 4 beta 2 in both VGA and QVGA because a great deal of misinformation is all around the Net on the different font sizes of each. For this test, I’ve also created a test page. As can be seen, the font sizes are roughly equal with all KVM’s, as opposed to what some people state. Also note that I’ve also published how you can increase the font size in TAO with a simple Registry edit (I’ve also attached the import file) – the ability to do this is clearly is a definite advantage of TAO.

As far as the “Keyboard, SIP, softkeys” group is concerned, please read THIS for a very thorough explanation.

I’ve already elaborated on most rows of the “MIDlet installation, separation, direct invocation, uninstall” group; therefore, I won’t go into this once more. It’s probably only “Registry import files to quickly reassociate JAR / JAD files” that still hasn’t been explained. Please see the “2.4 Co-existing on the same Windows Mobile devices” section in the Definitive Guide to Running 3D-enabled Java MIDlets on Windows Mobile to see why you might need these Registry import files if you plan to use more than one KVM’s on your Windows Mobile device and want to retain (or, quickly restore) the ability of a given KVM to deploy a MIDlet you click on in an external (Windows Mobile) Web browser or in the file system.

The “Security” group has already been explained above.

The “Misc (sound, compatibility with some popular apps, proxy, etc)” group contains some miscellaneous tests and rows like


  1. support for full screen: as can clearly be seen, in this regard, Jbed is the best (it indeed offers full screen) and Jeodek is the second (it only displays the upper task bar but not the lower menu bar; Jeodek M3G being the only exception when run on the MS Smartphone platform). So does Jblend. TAO and IBM J9, unfortunately, both display the two bars at the top and bottom. Needless to say, Nokia’s KVM also makes use of the full screen estate.

Sound support: as has turned out during the tests, Jbed (along with Nokia’s KVM) is by far the best KVM when it comes to playing in-game music. Note that I’ve tested it being stereo by running Doom RPG, a very famous MIDlet (even’s famous Sponge likes it). Strangely, while Jbed does support stereo, Nokia has failed the stereo test: it only plays music in mono. At last something that Nokia’s KVM gets beaten at :)

Proxy support is also very important and in high demand among Opera Mini users (as Opera Mini, by default, doesn’t support proxies, unlike Opera Mini Mod, where you can enter the proxy address right in the browser settings). In these tests, I’ve used my custom-written Web client MIDlet and Web server to easily find out which of the several possible ways Opera Mini (or, any other Web browser not supporting custom, local proxy settings) can be made use a proxy. As can clearly be seen, only Jbed and IBM J9 support this. (I haven’t tested Nokia’s KVM in this respect; I assume it works OK.)

the compliance test of three highly popular productivity (non-game) MIDlets: Gmail, Opera Mini and Opera Mini Mod.


5. jBenchmark Benchmark Results

I’ve also made some serious benchmarks with the well-known jBenchmark suite.

First, it’s worth pointing out that, while Esmertec Jbed does promise speedup by compiled code, in reality, it doesn’t mean THAT big a speed increase. That is, you won’t even see a twofold speed increase in everyday apps / games – if there will be any speed difference at all. In the charts, I’ve emphasized the tests where Jbed produced FAR better results than other MIDlet managers running on the same device. I’ve used plain bold to emphasize differences up to two; to emphasize even bigger differences (for example, the Chess test), I’ve additionally used Italic and Underline.

It’s also worth pointing out that while high-resolution (VGA) devices (in the test, the Dell Axim x51v and the HTC Universal) tend to run standard 2D graphics tests (at times a LOT) slower than standard-resolution (QVGA) models like the HTC Wizard or the HTC Vox / s710, with 3D (with the only currently available, 3D-capable MIDlet manager, the TAO Intent 11.x series), the differences aren’t that big.

As far as the 3D benchmarks are concerned, which show a clear, sometimes 20-fold speed difference in favor of the 3D hardware accelerated Nokia N95, don’t think Windows Mobile devices are THAT bad at playing the currently available 3D games. While M3G games indeed run pretty much flawlessly on the Nokia N93(i), N95 and E90 (the current Nokias with 3D hardware acceleration), the currently available, non-accelerated Windows Mobile KVM’s don’t produce MUCH worse results either – most 3D games still remain playable under WM too. In practice, the 20-fold difference in these synthetic tests reduce to two to three-fold difference with currently available, tested 3D MIDlets. Never ever believe anyone that states the opposite – he or she, then, hasn’t compared (unaccelerated) Windows Mobile and (accelerated) N95. I did and know the difference, which is certainly not even tenfold, no matter what the JBenchmark results suggest. Note that the reason the Nokia N95 scores so good in 3D is not because the built-in PowerVR 3D chip would be so much faster than, currently, the 2700G. It’s just because the former is supported by the built-in MIDlet manager and the latter isn’t supported by any Windows Mobile MIDlet managers.

Otherwise, speed-wise, there’s no clear winner. In general, all MIDlet managers have their strengths and weaknesses; there isn’t a single one with the best speed / efficiency (not even that of Nokia). Also note that, in general, the Nokia benchmarks don’t differ much from those of the WM KVM’s – of course, the M3G results are completely different. But, again, with real MIDlets, this difference is far less pronounced than one would think based on the synthetic JBenchmark 3D results.

Note that the columns are a bit different from the first chart; now, I’ve also listed the device I’ve run the given MIDlet manager on.

6. Game compatibility reports

I’ve also thoroughly tested some hundred (!) popular, well-known games; both 2D and 3D titles. (More on these games in THIS article – my previous and, now, slightly outdated article on 3D gaming.)

As has already been emphasized with the benchmarks, there’s no clear winner here either. As a rule of thumb, however, you should always try to run a given title under Jbed first. It’s the least compatible with existing games, but has three real advantages over both the M3G-compliant version of Jeodek and Jblend: if it does work then, generally, it’s the fastest; of the three, it has the best sound emulation and it supports full screen mode.

If you do encounter problems, give a try to alternative MIDlet managers: to IBM J9, TAO Intent, Jeodek M3G or Jblend (or, JblendFullScreen if you don’t need M3G and/or decent music but do need full screen because of, for example, the hard-coded screen size used by the MIDlet). Note that it’s pretty useless to try to run a title not running under Jbed under the non-M3G-capable Jeodek either. Doing the same under the M3G-capable Jeodek version, however, is a completely different issue.

As has already been emphasized, these MIDlet managers can co-exist on the same device and if you’re really into gaming as many MIDlets as possible, you will want to put at least three (Jbed, Jblend and Jeodek M3G) on your handset.

Note that there is an earlier version of this chart HERE. As the chart doesn’t contain for example the Nokia N95, the M3G-capable Jblend (only its full screen, old and pretty much incapable version) and lists far fewer titles than the main games compatibility chart, it’s in no way as important as the main compatibility chart listing the, for gaming, most recommended WM KVM’s (along with Nokia). However, it also contains some info on how different hardware (520 MHz XScale-based VGA HTC Universal vs. 195 MHz TI OMAP-based QVGA Wizard, for example) compare when it comes to running (graphics-intensive) games. As can be seen, the, otherwise, for gaming not really recommended Wizard behaves pretty OK even at the default 195 MHz CPU clock speed.

Highly recommended articles

TUTORIAL: Control issues of Java MIDlets – all secrets of button handling. Crossposts: PPCT, AximSite, XDA-Developers - 1, XDA-Developers - 2, XDA-Developers - 3, FirstLoox, BrightHand, HowardForums, SPT, MoDaCo,,

The Definitive Guide to Running 3D-enabled Java MIDlets on Windows Mobile (note that its discussion of some of the apps is a bit outdated; that is, consider the info in the current Bible of higher priority than in there. Also note that the comments (at the bottom) are really worth checking out, just like with the comments arrived at THIS article. Crossposts: PPCT, AximSite, XDA-Developers, XDA-Developers - 2, FirstLoox, BrightHand, HowardForums, SPT, MoDaCo,,

The Button Enhancer Bible & great button config tips for Opera Mobile / Mini users – it has a LOT of MIDlet-related info. Crossposts: PPCT, AximSite, XDA-Developers - 1, XDA-Developers - 2, FirstLoox, BrightHand, HowardForums, SPT, MoDaCo.

4PDA thread; translations HERE

5 things noobs should know about java mobile games

The MIDlet reviews at Mobile Critic and Midlet Review

The homepages of Fishlabs, Gameloft, Glu and Xendex

My old, outdated, related articles

What TAO Intent versions there are? - this article has been written before Risidoro’s releasing the 1034/1036 versions and the release of the generic SMS / phone.dll hacks. The latter means you don’t need to install the somewhat older version .1023 of the MIDlet manager on your phone-less PPC any more.

Running Motorola-specific Midlet games on the Pocket PC? YES!!

IBM releases new, 6.1.1 version of great Midlet runner J9; now, it’s fully compatible with Google Maps!

Great, Free Java/Midlet Environment IBM J9 New, 6.1 Version is Out – a Full Compliance & Bug Report & Never Before Published Tweaks that Help Using It Much Easier (in there, I’ve also reported on my effort of trying to relocate the IBM J9 deployed MIDlet repository from the main memory).

Java Midlets on the Pocket PC - the Complete Tutorial (outdated, but nice for some additional tips)

Cross-posted to (might be worth checking out for additional info / discussions!): PPCT, AximSite, XDA-Developers - 1, XDA-Developers - 2, XDA-Developers - 3, FirstLoox, BrightHand, HowardForums, SPT, MoDaCo,,

UPDATE (10/29/2007): Frontpage / Sticky thread at the official Opera Mini forums!! (a screenshot of this)

UPDATE (11/23/2007):


  1. in the meantime, thanks to XDA-Devs user defcomg, a new, third-party, free Bluetooth (JSR-82) library, BlueCove has been found, which supports IBM J9.

In the second part of this article, I elaborate on how you can “hack” some Nokia classes into MIDlets so that they have a chance to run. I also explain how you can force the installation of MIDlets that, otherwise, are refused to be deployed because of missing library (for example, Bluetooth under Jbed) support.


1. BlueCove

Let’s start with the compatibility issues.

1.1 Real-world (!) compatibility

First, it’s only IBM J9-compliant (NO TAO, NO Jbed, NO Jblend). Even under J9, unfortunately, it’s (as of this writing) pretty much far away from REALLY working. While it correctly implements Bluetooth discovery, in general, it doesn’t go further and just crashes at actually connecting (not only discovering). I’ve tested this with both the Microsoft and the Widcomm Bluetooth stack, using version 6.1.1 (that is, the latest one) of IBM J9.

My compliance test results are as follows:

Super Bluetooth Hack 1.07 (note that the two (2nd/3rd) versions are exactly the same): doesn’t even start (IncompatibleClassChangeError with Vector)

Blooover discovering works; the actual connection doesn’t (IncompatibleClassChangeError with

3D Constructo Combat: The same: it is able to discover other devices:

but, upon actually connecting to them (or, when you start it in server mode), it immediately crashes and exits.

1.2 Downloading, installing

If you still want to give it a try (again, it’s pretty much useless as of now!):


  • Get bluecove-2.0.1.jar (version as of 11/23/2007) from HERE


  1. if you have WinRAR on your desktop Windows machine, enter the WinRAR bluecove-2.0.1.jar command;

otherwise, rename bluecove-2.0.1.jar to and click it so that its content is shown;


  • extract bluecove_ce.dll and intelbth_ce.dll from the root of the archive; transfer them to the \bin subdirectory of your IBM J9 installation.

    Note that if you don’t want to hunt for / extract these files yourself, I’ve made them available HERE as a standard ZIP file. Just unZIP it and transfer the two DLL's.

copy bluecove.jar to the \lib\jclMidp20\ext directory of your IBM J9 installation. If “ext” doesn’t exist, create it.

you’ll need to use special link files to start your Bluetooth-enabled MIDlets. This also means you don’t need to deploy your MIDlets under J9 at all as direct links of this type don’t require the MIDlets to be deployed beforehand. A typical link file looks like this: 255#"\Storage Card\ibm\bin\j9.exe" -jcl:midp20 -cp MIDletName.jar "-jxe:\Storage Card\ibm\lib\jclMidp20\jclMidp20.jxe" MIDletName.jad (An example link file is HERE as a real file.) In here, change MIDletName to the filename of the MIDlet and, of course, change \Storage Card\ibm to the actual path of your IBM J9 installation.


Note that you’ll also need the JAD files in this setup. Should you not have them, use the free JADMaker to create them from JAR files (see the link for more info). If you don’t provide any absolute directories in the link file to the JAR / JAD files, then, you’ll need to copy the JAR file to the \lib\jclMidp20\ext directory of your IBM J9 installation before invoking the MIDlet through the link file. This is the same directory where bluecove.jar should reside. Also, the JAD file must be in the same directory as the lnk file itself.

2. Some additional hacking

2.1 Nokia classes missing in the game

If you try to run 3D Constructo Combat under J9 (I’ll elaborate on other MIDlet managers later), you’ll notice at once it doesn’t run. The sole reason for this is the lack of some Nokia-specific libraries in the MIDlet manager. You can, however, easily “hack” these classes into the JAR file of the MIDlet itself.

To do this, first, download THIS archive and unZIP it. Second, get WinRAR and, after installing it, enter the WinRAR jarfilename command to open the JAR (the main MIDlet) file. Now, just drag-and-drop the com directory (with all its subdirectories, of course) to the opened JAR file – making sure you don’t drop it on a directory, but in the root.

That’s all; now, your MIDlet might start.

Note that this definitely works with 3D Constructo Combat and J9 but will NOT work with Jbed, not even with the permission hacking I’ll explain in the following section.

(also see THIS Russian-language post for more info if interested. It doesn't contain much additional info, though.)

2.2 Permission hacking

As has been explained in the MIDlet Bible, some (very few!) MIDlets can’t even be deployed under Jbed (and other, less recommended) MIDlet managers. The reason for this is the deployment-time permission checking.

An example of these MIDlets is 3D Constructo Combat, which is refused to be deployed because of the unavailability of a library (here, a Bluetooth one):

You can easily help this and make MIDlets at least deployable (being actually runnable is another question). To do this, enter the WinRAR MidletFileName.jar command and extract the META-INF\MANIFEST.MF file. In there, look for the MIDlet-Permissions: row. For example, with 3D Constructo Combat, it’ll be the following:


Just delete it and overwrite the original META-INF\MANIFEST.MF file with the new version, all this in the JAR file. Again, the new file no longer contains the MIDlet-Permissions: row. Now, the MIDlet at least becomes deployable as can also be seen in THIS screenshot. (This, again, doesn’t mean Jbed will be able to run it as well. It won’t, not even with the above-explained Nokia class hack.)

UPDATE (11/24/2007): At last: an M3G-capable, much more gaming-friendly Jbed version is out!

As is stated in the Bible (as can also be seen in the main game compliance chart), the recommended, current version of Jbed has very limited game compatibility. If you do want to use it and do need to run for example M3G titles, so far, you needed to turn to alternative and, in many respects, inferior MIDlet managers. Now, this has changed: thanks to XDA-Devs forum members viperj and defcomg, a brand new and really great version has been posted.

This is version 070524.2.1 - that is, slightly older than the current, 070802.2.2 version. The major disadvantage of this version, compared to the 2.2 one, is the complete lack of sound emulation.

It runs all the games running under the old, M3G-capable Jeodek (see their list HERE) and is very fast. Furthermore, it isn’t affected by the locale bug of version 2.2 – that is, the inability to run under any locales using a language with a non-Western alphabet (for example, most East-European languages).

I’ve tested it with I-Play’s FIA World Rally Championship 3D, Namco’s Arcade Golf and High Speed 3D. All these worked flawlessly (except for, of course, the complete lack of sound), unlike under 2.2. Under 2.2, they didn't even start or crashed later.

If you really need sound emulation and it’s indeed able to run the given title, you will still want to version 2.2 of Jbed, though. For example, it runs Simcity Societies with great sound.


To install it, just grab THIS file, unRAR it to, preferably, the “J” subdirectory on your storage card (so that jbed.exe is right in the “J” subdirectory) and import THIS Registry import file (change all occurrences of "Storage Card" to the name of your card if it has another name). You might also want to copy a link to the main executable, jbed.exe, to \Windows\Start Menu\Programs (or, just \Windows\Start Menu\ on MS Smartphones). I’ve created the link file HERE.

UPDATE (11/25/2007): PocketPlayers Reloaded frontpage

UPDATE (01/16/2008): In the meantime, it has turned out that you can use the non-M3G-specific version of Jbed (that is, Cloudyfa's 20070802.2.1) with any localizaton setting if and only if you start your specific MIDlet directly; that is, via a system-level shortcut.

I've also been using Opera Mini 4 on the Blackberry 8800, using the default MIDlet manager coming with the device. Note that, unlike the built-in Web browser and the mailer, you MUST specify the APN of your operator for it to work. Otherwise, it'll just report being unable to connect to the Net after starting (and a lengthy installation process). To do this, go to Options / Advanced / TCP?IP and enter your APN (for example, "Internet" with T-Mobile.)

UPDATE (01/25/2008): HF sticky in the WM Pro (PPC) forum (a screenshot of this)

UPDATE (02/01/2008):

There are new builds of both Jbed and Jblend (two excellent MIDlet Managers – see the Java MIDlet Bible for more info). Due to lack of time, I haven’t tested them. Both has been done by Da_G (his projects’ homepage is HERE) and are accessible HERE. Note that you MUST register yourself (it’s free and is done quickly) in order to access the page above (along with the download).

I hope I’ll be able to test them some time – along with the default Blackberry MIDlet manager. (I might wait with testing the latter until version 4.5 of BB OS is released, though.)

UPDATE (02/06/2008): Another Jbed MIDlet Manager version has been released: JRebeiro_EsmertecJbed_20071119.3.1.

It’s available HERE (at the bottom of the first page).

As I don’t have the time to thoroughly test it, feedback is REALLY welcome!

UPDATE (03/13/2008): New MIDlet manager in development: PhoneME; Jbed for WM2003(SE) released! See THIS for more info. It also has a link collection to the latest discussions.

Also, HERE, I've commented on Sun's announcing direct Java / MIDlet support for the Apple iPhone.

UPDATE (03/20/2008):

1. I’ve posted a generic update on the latest, 3.1 Jbed version HERE. As you can see, you’ll want to update to the new version, which is available for direct download HERE. The article, in addition to testing JRebeiro's Jbed 3.1 distro, discusses a Jbed hack that, to some degree, fix the Smartphone screen display bug in Jbed.

2. I’ve published a review of SHAPE ServicesTSMobiles: Terminal Service Client for Mobiles, a Java-based remote desktop accessor, RDP-compliant client. It works pretty well on Windows Mobile, both Pocket PC’s and MS Smartphones, under (the latest, 3.1 version of) Jbed, the best MIDlet manager for Windows Mobile. (Incidentally, this also shows what’s Java is capable of – this MIDlet is REALLY nice and fast, even by Windows Mobile standards!)

3. Pinned (sticky) at the highly popular MoDaCo Smartphone General Discussion (screenshot of this HERE)

4. THIS and THIS posts in THIS thread (from an iPAQ 210 user) might be of interest to, for example, Opera Mini users.

UPDATE (04/05/2008):

In the meantime, I’ve tested two versions of the latest, 3.1 version of Jbed and found out the following (starting with, currently, the latest and, unless you MUST install it on your storage card without any manual hacking, most recommended version):

1. Jbed Java 3.1 20080222 (available HERE; mirrored HERE for your convenience): this version runs flawlessly under WM5 (not only WM6 – note that some older versions of 3.1 are NOT WM5-compliant). It supports 3D (tested with Need for speed carbon and Night Fever; neither of them run under the non-3D-capable Cloudyfa 2.1), (as usual, excellent) sound. It can’t be directly installed onto a storage card, however. (As with some older versions, it’s possible it can be hacked there, though, with some manual file copying and registry / start menu link rewriting – I haven’t tested this.)

2. I’ve also thoroughly tested JBed_20071119.3.1_3dMod_HeapSizeFix_v2_wm6(lovetz1) linked from THIS MoDaCo thread. As a plus, it can be directly installed on a storage card, as opposed to the version above. It, however, doesn’t support sound at all. Otherwise, it seems it’s pretty much the same as the version above – except for WM5-compliance: I haven’t tested the WM5-compliant subversion. Again, I’d stick with the 20080222 (the first) version unless you really need every single byte in your built-in storage.

3. Note that neither version was able to run the s60v3 (Nokia) version of Command & Conquer 3: Tiberium Wars, the latest-and-greatest real-time strategy from EA Mobile – upon loading the mission (and displaying the progress bar), it just locks up. (Needless to say, it’s working flawlessly on the Nokia N95 v20). It seems no Jbed version is compatible with this excellent game – I’ve tested with several. This means the extended, “hacked” heap didn’t help with particular game. It might help with others, though.

4. Also note that the first beta of Opera Mini 4.1 has been released in the meantime. It simply ROCKS and is a must. See THIS for a complete review & tutorial.

UPDATE (04/11/2008): XDA-Devs forum member Ebenezer has released a version of Jbed 20080222 3.1 that can be directly installed to a storage card. It also supports sound and M3G (3D). Make sure you switch to this version if you prefer keeping your MIDlet manager and deployed MIDlets on your storage card. I've also got rid of the old, 2.1 Cloudyfa version (along with all the previously-mirrored and, now, outdated Jbed versions - this is why the old mirror links will no longer live) and made the new version of Jbed available HERE for direct download.

UPDATE (04/12/2008): Note that the just-recommended Ebenezer Jbed 3.1 doesn't create a link in Start Menu (not even when installed to the built-in storage); therefore, you'll need to manually create it. It's pretty simple: either copy (after, if you install Jbed on a storage card, changing "\Windows\jbed.exe" to "\Storage Card\Esmertec Java\jbed.exe" in it; if you're afraid of manually editing the file, I've created it for you; just right-click THIS and select Download / Save) to \Windows\Start Menu\Programs (on a touchscreen-enabled Pocket PC) or \Windows\Start Menu (on a touchscreen-less MS Smartphone). On Pocket PC's, you can also go the usual way: go to the home directory (for example, \Storage Card\Esmertec Java), highlight jbed.exe, select Copy; go to the target directory (\Windows\Start Menu\Programs or any subdirectory of it) and select Edit / Paste Shortcut. Then, you may still want to rename the just-created .lnk file so that you can remove the "Shortcut to" prefix.

UPDATE (04/14/2008): XDA-Devs forum member defcomg has just released a version of Jbed 3.1 not suffering from the Start menu link creation bug any more. It's currently available HERE and will be avalable on my DB back-end in a few hours. Therefore, if you still haven't installed Jbed 3.1, make sure you prefer this version to the others linked to above.

UPDATE (04/16/2008): In the meantime, the last-recommended defcomg version has turned out to be buggy; for example, if you install it on a storage card, it’ll still store the deployed files in \Windows\appdb - that is, the main storage. Furthermore, some people have reported (see for example THIS and THIS) it to be incompatible with Opera Mini 4.1 beta (it worked on my Wizard tho) – which isn’t the case with the previously-recommended Ebenezer version. Finally, it can’t be installed on a storage card NOT named Storage Card – that is, on a, say, non-English device or into an alternate Flash memory like “Storage” or “Flash disk” in the Ranju WM6.1 version v7.6 for the HTC Universal.

Therefore, you’ll want to switch back to the Ebenezer version available HERE (requires registration at XDA-Devs) or HERE (direct download from my DB back-end) if you encounter these problems and want to keep your deployed MIDlets on your card. Again, note that you will need to manually create (copy) a shortcut to Jbed.exe with this version – this is the only problem with it. It runs (the signed version of) Opera Mini 4.1b (and, of course, all the other compatible MIDlets, including games) just great.

UPDATE (04/19/2008):

1. Unfortunately, it seems none of the Jbed 3.1 versions are able to run Opera Mini 4.1 beta on touchscreen-less MS Smartphones (but NOT on Pocket PC's!!!) if you switch to other apps (for example, the home screen) and, then, back, you will no longer be able to control Opera Mini. I've tested this on my WM5 s310 / Oxygen (major problems) and, with HTC's recently-released ROM upgrade, upgraded WM6 s710 / Vox (not that frequent problems but still annoying). At XDA-Devs, other people have also reported the same problem with their Smartphones.

If you do encounter problems like this and can't refrain from task switching, you'll want to downgrade to the Cloudyfa 2.1 version available HERE. Note that it can safely co-exist with 3.1 if you've installed the latter in another directory (for example, on a storage card or a flash disk) - then, it's only the file associations that will be needed to, say, quickly switched if you don't want to manually deploy a MIDlet from inside the GUI of the specific MIDlet manager. That is, you don't need to delete Jbed 3.1 if you plan to keep it for example for M3G gaming.

Note that touchscreen-equipped Pocket PC's do NOT suffer from this problem!

2. Ebenezer has released a fixed version of his Jbed 3.1 MIDlet manager HERE. Now, it does create a link file in Start Menu / Programs on both Pocket PC's and MS Smartphones. It also installs to any target media (not only "Storage Card"s) without problems. Note one caveat, though: the link file (the one the installer puts in the Start menu) has \Storage Card wired in, which doesn't work with any storage card (or flash disk) named other than "Storage Card". Hope this is fixed some time; in the meantime, just manually edit the link file to have the correct path.

UPDATE (04/25/2008):

1. XDA-Developers forum member m3uch4 has published a decent tutorial on creating shortcuts for Jbed – highly recommended.

2. badbob001, who has just released a new, 0.09b version of his StartOperaMini by adding the exclude list feature (and a LOT of other goodies – make sur eyou check out the dedicated XDA-Devs thread!), has found out a pretty easy-to-use fix for the above-mentioned Jbed 3.1 resume bug: if you have Direct Address Input disabled (it’s enabled by default), press #1 to open the Enter Address window. Then cancel out and the Opera Mini screen should be responsive again. (BTW, this might work with other dialogs requiring manual input – I don’t know, haven’t tested the latter.) Incidentally, he has also found out the problem is surely a Jbed-related issue because the Gmail MIDlet is also affected by it. Let me cite him: “One thing you may want to investigate is Jbed's background running option. If I run jbed, turn on background running, then launch opera mini, the problem seems to not occur with my limited testing. Since I prefer to directly launch opera mini, it would also be nice to have a way to enable background running by default.

If enabling background running really fixes the issue, then I guess it's a bug with jbed 3.1 restoring itself from its own suspend mode.”

UPDATE (04/05/2009): Major Java MIDlet manager update: now, parallel execution possible under Jbed etc.

Thanks, I give it a try and report back.

Yes, the ZIP file seems to be served from the server cache, this is why it's still returning the old, just-overwritten ZIP file... hope it'll be flushed / reloaded in a few hours.

OK, now the new version is returned.

Syndicate content