Monday, 25 August 2008

The Sorry State of JavaFX

[Update: since JavaFX 1.0 has come out, this article is out-dated. See The Sorry State of JavaFX 1.0 instead.]

It's been over a year since F3 has been rebadged JavaFX in May 2007. I had enjoyed programming in JavaFX script and it really is easy to learn and enables rapid application development.

JavaFX is fine for its original goal of delivering a 'media' stack for the Java platform. However, as JavaFX is more and more being pitched to compete with Silverlight and Flash to be Sun's answer to Rich Internet Application (RIA) platform, it is falling short.

A major requirement of a RIA platform is to be able to run the application seamlessly in a web browser - i.e. using the browser as a canvas, not just using the browser to download the fat client. JavaFX does not do that. Both Silverlight and Flash's home pages promote their own technologies by using them. But what does javafx.com use? Javascript! So far almost none of the JavaFX demos show an application running in browser. For the few that do show, such as the Applet Example, when I tried it using javafx-sdk1.0pre1, all I got was a blank applet canvas. (I did manage to run a JavaFX application as an Applet from HTML via trial and error though).

Also, no support for being inlineable with HTML will decrease its flexibility as a RIA. Tey Chui gave a comprehensive argument on this issue.

Sun has been promising a browser javafx plugin for a while now. I do hope they can deliver it together with the proper 1.0 release. Talking about the releases, I was really surprised by the drastic changes made in the current 1.0pre1 release. It has pervasively changed the JavaFX script syntax so that your previous JavaFX code in the last 2 years simply will not compile anymore. Furthermore, the bundled JARs have also been totally changed - the javafx.ui.* simply disappeared! This suggests a deeper underlying architectural change.

Well, making big changes may not be a bad thing, especially considering JavaFX' beta status. However, the documentation available in supporting the developer community to cope with the change is totally inadequate. Sun does have JavaFX Reference documents. However, the current state of these documents are nothing near to be complete or even adequate. For example, the Migration Guide does not tell you what had happed to 'trigger on new' or nullable datatypes (e.g. int?) or recommendations for replacing javafx.ui.* with the scene graph libraries...

For now, I will put my JavaFX exercises on halt and wait for the final v1.0 release.

No comments: