Original URL: http://www.theregister.co.uk/2009/02/17/javafx_mobile_review/

Surreal appeal of Sun's JavaFX for mobile

Java ME a safer bet?

By Matt Stephens

Posted in Developer, 17th February 2009 21:35 GMT

Review It's somehow fitting that Sun Microsystems chose Barcelona, the home of modernist architect Gaudí and this week's Mobile World Congress, to announce JavaFX Mobile 1.0 - part of the JavaFX SDK 1.1 release.

Just like Gaudí's work, there's something wavy, colorful and even surreal about Sun's shining new hope for Java. I've never seen such a show of strength mixed with this much diffidence. Sun is evidently desperate for developers to like JavaFX.

Consistency of message, though, is not Sun strong point. Here it claims there exists 2.1 billion Java-based handsets, but here it's gone for 2.6b billion, adding that eight out of 10 cats, sorry handsets, shipped in 2008 were running Java technology. That's a discrepancy of some 500 million mobile phones.

But whichever data you subscribe to, it's a compelling notion that a brand-new, graphically oriented scripting language could have this kind of installed base already at launch.

Momentously, Sun has offered JavaFX 1.1 plug-ins for both Sun's own NetBeans platform and rival development ecosystem Eclipse. But there's still no sign of a GUI editor anywhere. Major lack of kudos to Sun until this vital component, which should have been there from the beginning, eventually arrives.

NetBeans does at least provide a Mobile Emulator, with two sample devices pre-installed: an FX Phone and an FX Touch Phone. The latter emulator is shown in the screenshot below, rotated counterclockwise - shades of iPhone envy there from Sun, methinks.

JavaFX Mobile emulator

If you can touch it like an iPhone, and turn it like an iPhone...

Another mobile demo impressively shows how Java Micro Edition (Java ME) now provides access to your mobile phone's accelerometer. Developers will soon be swinging their phones like Wiimotes while the garbage collector stutters to catch up.

To achieve this, the demo delves into the javax.microedition.sensor package, viz the following JavaFX code:

var sensors = SensorManager.findSensors("acceleration", null);

And then the function to get acceleration data (called by a Timeline every 100ms) is as simple as this:

function getData():Void {
    if(accelInfo.getDataType() == ChannelInfo.TYPE_DOUBLE) {
        var data: Data[] = accelConn.getData(1);
        axisX = data[0].getDoubleValues()[0];
        axisY = data[1].getDoubleValues()[0];
        axisZ = data[2].getDoubleValues()[0];
    }
}

This is a good example of how JavaFX gains much of its power by leveraging the underlying Java software stack. Other underlying phone features are similarly exposed, such as address book, Bluetooth, camera, messaging, location, and payment.

JavaFX Mobile apps will, in theory, run on existing Java ME phones, but will require an initial download of the new platform libraries. Sun, though, has been aggressively partnering with a number of handset, carrier and mobile software partners, including LG and Sony Ericsson - though notably not yet Nokia or Samsung - to preinstall the libraries on new phones.

A major criticism of Java ME has always been the fragmentation. It's never been possible to simply write a Java ME midlet, test it on a few phones, and safely assume that it'll therefore run everywhere. Hacks and workarounds need to be factored in for pretty much each model you want to support.

True, Java ME improves matters by integrating Connected Device Configuration (CDC) and Connected Limited Device Configuration (CLDC) configurations in one SDK. But the primary goal for JavaFX Mobile, one would think, should be to flatten the playing field: provide some level of guarantee that a scripted app will run unaltered across a broad range of certified compatible phones, without resorting to pre-processor directives and the like. As these are limited-resource devices, it seems that a Fail Gracefully API should be a central part of the platform. Ease the number one pain point for Java ME developers worldwide. Unfortunately there's no such API or capability in sight.

In fact there's currently very little information to be had regarding even the differences between targeting a mobile device and a desktop using JavaFX. Aside from concerns such as screen dimensions and image file sizes, the same JavaFXScript desktop code should run unaltered on your smartphone. At least, that's what we're being promised.

However, some notes casually buried away in the 1.1 release notes suggest otherwise: the javafx.ext.Swing package isn't available in the common profile so won't work in mobile applications - this means no standard desktop UI components such as buttons, trees and listboxes.

You do get one component, javafx.scene.control.TextBox. But the richness of the desktop component set just isn't there in the mobile configuration. When you look at the existing mobile demos, you'll quickly realize the colorful, motion-blurred, willy waving - such as a custom image masquerading as a button - divert attention from the lack of GUI components.

In the meantime, Veriana Networks senior vice president of technology and JavaFX blogger and writer Jim Weaver, has written that we should start seeing "lots of UI controls" in the Common profile, anticipated "before" JavaOne 2009. Which in the meantime leaves the cupboard looking rather bare.

In theory you could integrate a proper mobile GUI toolkit such as the Light-Weight User Interface Toolkit (LWUIT), but details are currently thin on the ground. This all makes me wonder how Sun can release JavaFX Mobile to the world and call it "1.0" with a straight face. A clear case of marketing racing ahead of reality.

Window of opportunity

Sun has had a massive window of opportunity to establish JavaFX Mobile, but the current stunted release dressed up in pretty colors strikes me as a little underwhelming given the time Sun's had to work on this. Twelve months ago it could have shipped something less compelling and still had the rapt attention of the major mobile vendors and carriers.

Luckily for Sun, Microsoft has yet to show Silverlight for mobile, due for release "sometime" in 2009 and even then on a limited range of devices. Adobe has Flash Lite, which has yet to make waves, and more denials than announcements concerning a possible Flex for mobile.

How long it'll take for Microsoft and Adobe to move beyond this limbo and into real products and adoption, it's hard to tell. Unfortunately, once they do, they'll both have the tools, resources, runtimes and developer buy in that's currently not evident from Sun.

While there are many cool new things in JavaFX 1.1, developers are advised to ignore Sun's frantic hand-waving in front of a half-baked platform and avoid being an early adopter. Java ME with LWUIT is actually far more appealing - and proven - right now. ®

Matt Stephens co-authored Use Case Driven Object Modeling with UML: Theory and Practice, which illustrates how to create the ideal software design with Enterprise Architect, Spring Framework and JUnit.