BlackBerry Bold 9700: JVM Error 102

My brother in-law’s BlackBerry 9700 suffered a new problem this time JVM Error 102. A quick google search turns up more 600,000 results – so this is I assume a pretty common problem. In his case it seems entirely random – he had it plugged in to charge and when he went to unplug it, it was stuck on an all white screen with JVM Error 102 with one choice: reboot. It seemed the device was stuck in a reboot cycle, always hitting the same error.

I followed the instructions on this page, but I’ll also repeat them here to cover exactly what I did. Sadly this requires a Windows machine (I used XP).

If you don’t already have the BlackBerry Desktop Software installed and running, you’ll need that. If you’ve never had the BlackBerry connected to your Windows machine, it may also need to install some USB drivers, my Windows XP was able to figure out what was needed automatically. Hopefully you’ll be in a state as shown in the picture at the top of this post, able to see the device but not able to do anything.

Now you need the JL_cmder utility. The utility is just a script driving the JavaLoader program. With the BlackBerry Desktop Software running, also run this script. If you are having trouble with this part, I’d advise you to stop trying to solve this yourself and get some help. You’ll need to be comfortable with command line programs to succeed.

If you see some output like the following when using JL_cmder:

RIM Wireless Handheld Java Loader
Copyright 2001-2007 Research In Motion Limited
Connecting to device...debug: HRESULT error dur
ing Open: 80040154
Error: unable to open port

Then you’ve probably failed as I had to install the BlackBerry Desktop Software, or it isn’t running, or you’ve got a driver problem, or maybe there is a more serious problem with your BlackBerry. Once I had installed and was running the BlackBerry Desktop Software this problem went away for me.

Now you want to grab the eventlog. This will open a notepad with the contents of your log. In my case there had been many failed boots, so the error was repeated many times. Here is the last complete entry:

guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:System Startup
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:VM:FSNHv=1
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:VM:CVER=5.0.0.351
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:VM:PSIDv=266951
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:CMM: verifyHash failed for net_rim_device_apps_games_wordmole_graphics_480x360-6(3437)
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:VM:+BORK
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:JVM Error 102
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:Invalid code in filesystem
guid:0x97C9F5F641D25E5F time: Wed Dec 31 19:00:00 1969 severity:0 type:2 app:System data:JVM:INFOp=21e0b6b1,a='5.0.0.351',o='5.1.0.98',h=4001507

You can see there is a verifyHash failure in the log, I’ve marked the file name of the offending file in bold (your log won’t have the bold marking in it – that’s your job, to identify the problematic file). So there isn’t any good reason this file was corrupted and not another, but luckily it is clearly a non-critical file. I was amused by the appearance of the Unix epoc in the log file.

Now that we know what the problem is, we’ll just remove the file. I’ll stress that the filename is going to be unique to your problem. Reading the error log is a critical step. Using a command shell we’ll execute the following:

JavaLoader.exe -u erase -f net_rim_device_apps_games_wordmole_graphics_480x360-6

Doing this caused the device to reboot. If it doesn’t reboot on it’s own, you might need to manually reboot/reset the device. That’s it you’re done – you should have a working BlackBerry at this point.

Follow up steps – you should synchronize with the desktop software to back up your device. It may be wise to push a firmware upgrade to the device, even the same version you had (assuming you were fully up to date) – this will replace all other files which may have been corrupted. I didn’t do this, but I’d hope the desktop software makes this a straight-forward process.

Review: TPU GEL Case for HTC Desire

The NexusOne had a nice dock, however the dock really wasn’t compatible with any cases. It did have a screen protector on it (from zagg). For my (new to me) HTC Desire I have no dock, so I thought I’d get a case and a generic screen protector. I’d dropped the NexusOne once or twice and cringed as it hit the ground. No major damage was done, but I did add a dent or two.

You can see what I bought above. It was a $2.99USD from an eBay seller, shipping from HongKong included. Based on the stamps on the envelope, it cost about $0.70 postage to ship it.

The case was exactly what I expected. A slightly flexible case with all the right holes for camera, headphones and power. The power and volume buttons are covered but function well. It is a good snug fit over the phone. The case adds some bulk to the phone, but not a lot of weight. I’m still quite pleased with the case after having it on the phone a couple of days.

The case is described as TPU GEL. Thermoplastic Polyurethane (TPU) is a type of plastic, the GEL is I suspect used to describe the flexibility of the case, as there are TPU cases which are hard plastic. Jenn has a Kate Spade silicon case for her iPhone 3G and it’s quite a bit more rubbery than this one.

The use of screen protectors is almost a religious issue. I hadn’t had a phone with a screen protector until the NexusOne, and it came to me with one installed. The HTC Desire does have Gorilla Glass on it, however it isn’t immune to small nicks and scratches.

 

Hopefully you can see the numerous small nicks on the screen in the picture above. You didn’t see them in normal lighting conditions, but the were there. I figured for the price, I couldn’t really go too wrong.

The screen protector is the typical generic screen protector. They include a small cleaning cloth as well. The instructions read a little like engrish, but are understandable. The screen is by no means anti-glare, the resulting finish is high gloss and I did have a few minor bubbles. Compared to the zagg which had a very distinctive feel to it, this one feels just like the bare screen.

I ran into the usual problems when applying the screen protector. The first film you take off exposes the sticky adhesive that will bind the screen protector to the phone. Of course it will pick up every free dust particle in the area – and even a grain of dust will show up as a bubble on the screen. Using the dusting cloth too close to the adhesive is a great way to get more stuff stuck to it. I found that the corner of the protective film used as a pick was useful for clearing dust bits out of the way – even off the adhesive.

One tip I may try in future is to do this in the bathroom. Run the shower to make the room a bit steamy, this will reduce airborne dust. Then make sure you’ve got good bright lighting and go to it. If you can get it perfectly aligned the first time that’s best, the more you mess with it – the more you are dealing with small bubbles. Large bubbles can be worked out prior to removal of the 2nd film.

Looking at the final product of my efforts below, you can see a number of imperfections in the application. Dust trapped below the screen protector as well as a few circular artifacts which are air bubbles. The screen protector also didn’t quite seal down in a couple of corners (likely where I handled it too much). None of the imperfections are highly visible in normal usage.

Apparently Steve Jobs had commented (on iPod’s) that stainless steel looks beautiful when it wears, and I have to agree. The rate at which I seem to change phones lately (about once a year) it is unlikely that I really need to worry about protecting the device all that much. Without any case or screen protection, it is likely this phone will last the 3 years or so before it is completely obsolete – I’ll still feel much better the next time I drop it onto the pavement.

 

 

 

 

 

 

Nexus One vs. HTC Desire

Since February my phone has been the Nexus One. When I got it I wrote up a brief review where I compared it to the iPhone 3G and the HTC G1, so I guess this is a sort of exit review for the Nexus One as my new phone is the HTC Desire (also known as the Bravo or A8181).

The HTC Desire is almost the same hardware as the Nexus One. The wikipedia page has a good feature comparison so I’ll try avoid going over that ground. You can see from the photo at the top of this post that they share pretty much the same form factor. The Desire has a little bit of the HTC chin design where the Nexus did not. The Nexus notably has the three brass dots for the docking station which the Desire does not.

Looking at the back, things are pretty much identical. The Nexus One has a band of exposed aluminum frame (which can host an engraving), and the power button is slightly different likely due to the small difference in back cover design. The size, general shape, and weight of the phones are basically identical. I do notice that the Desire feels ‘flatter’ for some reason, and it almost feels as if it is a slightly more refined phone.

The Desire has a Super LCD vs the Nexus AMOLED. There is a visible difference here, and one that sticks in my head. In day to day use it isn’t bothersome, but more than just a subtle difference. The Super LCD tends to have washed out blacks, and appears a little bit dimmer to my eye. In every other aspect the two displays are equivalent, enough to make the differences a non-issue for day to day use. The Desire has a gorilla glass screen, where the Nexus did not.

The dock was a nice feature on the Nexus, just drop it in and it charged. I rarely plugged it into a microUSB connector. However the dock also discouraged the use of any sort of bumper case for the Nexus, I’ve got a case on order for the Desire already.

So while these two phones are quite similar, the button layout is not. Let’s compare the HTC G1 (top), Nexus One (middle), and HTC Desire (bottom):

The G1 actually had buttons dedicated to phone functions, it also had 5 function buttons vs. 4 in the later phone. The Nexus had touch sensitive buttons, which took some getting used to after having real buttons. The track ball was transparent and allowed for coloured notifications. The Desire swaps the track ball for an optical track-pad, some people really dislike this but I haven’t found it to be a problem. The back and search button is a rocker, effectively working as independent buttons.

Looking across the layouts, the home button has wandered around in different locations for every one. Search and menu are fairly consistent, but I’m not sure it helps much. Layout changes like this really mess with your head/muscle memory.

In stock form there are bigger differences between the two devices. However, both are fairly friendly to root and flash with your favorite community ROM. I’ve been running CyanogenMod since I got the G1 and continue to do so with the Desire.

Looking at the internal storage is where we notice some big differences. Nexus One: 196MB, Desire: 148MB. Having come from the Nexus meant that I very quickly started to hit out of storage problems, forcing me to move more of my apps to the SD Card. Everything fits without resorting to apps2sd or other hacks.

Speaking of hacks, you can change this if you are willing to flash a new HBOOT – this is of course somewhat scary as messing up HBOOT may be difficult to recover from. It also requires the phone be in S-OFF (developer) mode, allowing modification of /system while Android is running. Contrary to most of the material out there you can run in S-ON mode and have custom firmware, there are some limitations but no deal breakers (my Desire is currently S-ON).