Given that Oracle is predominantly focused on enterprise software, it has been tempting to assume that the vendor would largely ignore client-side Java. It became clear at JavaOne this year, however, that Oracle is making a renewed push on the desktop, spearheaded by JavaFX. It will also be open-sourcing the entire JavaFX platform via OpenJDK.
JavaFX has been around since 2008, but has gained only limited traction, with many developers complaining that it required them to learn a new language (JavaFX Script) in order to work with the GUI development framework. At last year's JavaOne, Oracle announced that JavaFX 2.0 would deprecate JavaFX Script, replacing it with an entirely Java-based API. JavaFX 2.0 delivers on this, meaning that developers can write JavaFX applications using any JVM language (Java, Clojure, Scala, Groovy etc.) and target any device running a current JVM. The update also introduces several new features, such as an XML-based UI description language (FXML), as well as support for new devices, including Microsoft's Kinect.
To help developers work with FXML, Oracle is developing a graphical editor called JavaFX Scene Builder, which it showed off during the conference. It is a stand-alone tool, but will be integrated with NetBeans. Currently in private beta, a public version is expected early in 2012.
Oracle isn't ignoring HTML5 and JavaScript either. JavaFX 2.0 allows you to embed HTML5 content in JavaFX applications and have it rendered via WebKit. Another Oracle project announced at JavaOne, called Avatar, aims to enable hybrid applications where HTML5-based UIs share content between Java clients and Java EE servers, both in data centres and in the cloud.
Whilst Oracle will continue to support Swing to some extent, it is clear that Oracle believes JavaFX is a better way of building Java GUI applications, and there was plenty of interest in JavaFX at the various related sessions InfoQ attended during the conference. But however good JavaFX may be as a GUI development system, it's all for nothing if you can't run it on the devices you want to target.
Issues here are particularly acute on the mobile side. Java ME was an early success for Sun and mobile-phone manufacturers alike, but the technology has struggled to keep up in recent years. Research in Motion is replacing its Java-based BlackBerry platform with one based on the QNX real-time OS, Nokia's reliance on Java ME is likely to fade as it moves to Windows Mobile, and even the Java-based Android platform uses a non-standard implementation of Java.
Things may improve. At JavaOne, Oracle announced plans to unify Java ME with the latest version of Java SE. The converged platform will hopefully mean that technologies such as JavaFX will be available on more devices. During a keynote, Oracle's Nandini Ramani, Vice President of Development for Client Java in the Oracle Fusion Middleware group, demonstrated that she could get the same JavaFX game running on both an Android tablet and, to thunderous applause, an iPad. This doesn't mean that Apple has finally relented and decided to allow the JVM on iOS; the demo was a proof of concept that linked a private JVM as a resource inside a launcher app, but it at least showed it was possible. During a conversation afterwards, Ramani confirmed that Oracle hadn't discussed with Apple whether they would allow this technique to be used in practice. She did though also point out that there is a precedent, in that Apple already allows the same technique to be used to circumvent similar restrictions in the OS X app store, and Cyberduck, for example, does so.
Oracle has also put emphasis on getting JavaFX to work on more desk-top operating systems, with GA releases for both OS X and Linux expected next year. When it arrives in 2013, the Java 8 SDK, though not the runtime, will include JavaFX 3 (presumably on all platforms), and Oracle then intends to move towards standardising the technology through the JCP.
Finally, Oracle has a preview release of JDK 7 for Mac OS X available, following Apple's decision to deprecate its own Java implementation in 2010. The GA release for this again is expected in 2012.