There's actually a page crammed full of quite dusty mini-apps, each one giving the impression of a half-hearted Friday afternoon's tinkering, whipped out from under the developer's nose and slapped onto the website. Compare this with Adobe Systems' TourDeFlex, an integrated app packed with examples, none of which fail to impress. I can't quite put my finger on it, but somehow, Flex has the mojo and JavaFX doesn't.
Crashed player: the "just works" myth of JavaFX
I also feel that Sun/Oracle is missing their own key point: JavaFX is meant to be about reaching across different platforms, making the original Java premise of "Write once run everywhere" actually happen.
And yet if I load up Javafx.com on my Android phone, I get the full-size website and an invitation to download the 94MB NetBeans IDE for Windows. Never mind, I'll scroll diagonally down and try one of the sample apps. After all, the loud marketing insists that JavaFX apps run equally well on mobile devices as they do on the desktop. Again, no go. I'm pointed to a download page offering Java for Windows, Solaris, Linux or Apple. Could it be, then, that JavaFX is all about the marketing and very little to do with delivering on its promises?
For example, it's taken years for Sun to deliver a drag-and-drop UI builder, something which should have been there from the start. Even now it's still only in preview form.
Confession of a fanboi
In many ways, I'm a Java fanboi and it pains me to be so critical of JavaFX. As a technology, it should be granting Java a whole new lease of life. Instead it's stifling Swing development - which is where Oracle's efforts really should be now.
Swing is an integral part of the JDK, and it appears to be undergoing a renaissance in the jobs market. A quick search on jobserve.com reveals 60 new Swing jobs posted in the last seven days, in the London, UK-area alone. Let's compare this with the message I got on the number of new JavaFX jobs:
"Your search javafx returned no jobs and was changed to java"
Swing is a mature UI platform that doesn't deserve the neglect it's now receiving. What Oracle should do is slice out the good bits from JavaFX (there aren't that many), throw away the carcass, and graft them onto Swing.
Next, use the Java Virtual Machine's topnotch scripting support to integrate an existing scripting language (but not the quirky abortion that is JavaFXScript), one that supports Lambda-style functions (aka closures), making tasks like event handling and table cell rendering a breeze.
Oracle already has a top-class Swing GUI designer in the form of Matisse, which it's indicated it wants to make more generally available. Deployed applications are also WebStartable, and the Applet experience in Java 6 is actually pretty good. Swing is so strong, in fact, that I wonder why Oracle didn't just ditch JavaFX at the first gas stop on its new journey.
Unfortunately, while Oracle follow Sun's example and dithers about with the failing JavaFX, allowing Swing to languish and fall behind the times, developers will continue to migrate to Flex and the myriad Ajax toolkits. And Java will continue to be seen purely as a server-side platform. It's a shame, as Java had potential for world desktop domination there for a moment. ®
Works for me...
(Disclaimer: JavaFX enthusiast writing here.) The GeoView works pretty well here. I don't notice scrolling or any other issues with this or other Java/JavaFX applets. Notice that you really need JRE 6u18, and also JavaFX 1.2.3 - this point-release was readied especially to fix a few bugs for the GeoView app, days before the games started. (Unfortunately the JNLP doesn't enforce these runtime versions, it just requires JRE 5+ and JavaFX 1.2+, so the GeoView may run on older crap if you've already got it installed.) And you really need Windows - the JavaFX ports for Mac and Linux are still lagging a bit. On the Mac, the problem is Apple's JDK lag behind Sun's; on Linux the problem is much more severe as Linux's core media stack is a pile of monkey dung, from graphics drivers to the multiple crappy/nonintegrated sound subsystems etc.
The very first time you load the GeoView (or any FX app that's your first FX apps), there is a bigger download time because the JavaFX runtime weighs in ~10Mb, and that's assuming you've already got the latest JRE. But the warm-start is pretty good in my tests (JRE 6u18 is important for that, contains some significant improvs in the Java PlugIn cache where applets are stored).
Notice that GeoView will query its server for specific info, like each country's flag and medals, on demand as you navigate stuff. This data is stored in the Java PlugIn cache (check the JPG and JSON resources) so the next uses will be fast. Perhaps they could pre-load things in the background when the applet is idle, e.g. prefetching data from nodes that are "neighbor" to the node in focus, that would provide an even better perf. Don't blame the platform for everything; app design plays a big role in PERCEIVED performance.
Now, Flash is certainly ahead in deployment, but... I've just seen the Tour De Flex demo... pretty UN-impressive. The deployment is still good, but not brilliant: I already have the latest Flash so the initial UI loads reasonably quick (>5s) and without fuss. But it's certainly not in the "instantaneous" standard of most Flash applets; and I'm just talking the initial screen! Every single menu item I open for specific demos has a VERY noticeable, extra loading time - always several seconds, like the COLD-start of an entire small Java applet. The performance sucks horribly - drawing of the chrome, simple effects like fade when a modal dialog is shown, etc. Try dragging a window with transparency, e.g. in the TileWindow demo, the shitty performance JUMPS in your face. And don't tell me that Flash 10.1 will fix this with GPU acceleration and other enhancements - I AM already using 10.1beta2. (Doing this test on a Q6600 + NVidia Quadro FX1700, it's not a bleeding-edge gamer system but it's pretty decent. God helps Flex on a laptop with some Intel IGP.) The look&feel is nothing to be proud of, nor is the memory usage (a bit HIGHER than JavaFX's GeoView, in my tests).
All in all, for tiny applets there's still no competition to Flash which can cold-start a small SWF in a couple hundreds of milliseconds. But it's a different ball game for Flex/AIR, that demand very large frameworks that are downloaded on demand (and apparently without any decent caching). Flex/AIR is just as much slow-booting and RAM-eating as Java/JavaFX, so the playing field is much more level here (of course Adobe is still ahead in items like tooling, developer midshare, and runtime distribution - but then, they've been 10+ years in this game, so there's still a lot of ground for JavaFX and also Silverlight to catch up).
I'm getting a LOT of work done in JavaFX. Much more quickly than in SWING.
Its like the press thinks the only thing I need JavaFX for is to add bling
I need a lot more than that.
The constant comparison of JavaFX to FLASH is all obsession
and little substance. It seems to be a rut that tech reporters
just fall into when talking about JavaFX. Flash does a very good
job at adding bling to webpages. It is quick and easy. But the
depth isn't there. Nor is it cheap.
I added up all the costs that Adobe charges if
you want to be a full fledged Flash developer. I was up
to $THOUSANDs OF US$ when I added up all the charges
for Adobe stuff.
Adobe Acrobat 9 PRO $ 699.00
Adobe Flex Builder $ 699.00
Adobe Flash Pro $ 699.00
Adobe Illustrator $ 599.00
Adobe AfterEffects $ 999.00
Adobe DreamWeaver $ 399.00
Adobe Audition $ 399.00
Adobe Cold Fusion $1,299.00 or $7,424.00 for the Enterprise
Adobe Captivate4 $ 799.00
Adobe Authorware 7 $2,969.00
and there is more $$$ for all sorts of extra specialized tools...
AIR and FLEX are new technologies trying to be a JVM. Adobe is adding
capabilities, then rethinking and starting over with new versions
I understand. They've got a ways to go with those.
If you look at the FLASH posts in that community you'll see that they
have a LOT of technical problems to overcome. Just as there are
with JavaFX. For example Flash 'tricks' need to be employed to do simple
things like play mp3 loops without gaps in the sound.
I really do think that you CANNOT develop an app that will run well on
a phone and on a device with a bigger screen. It just isn't possible
without completely rethinking the app. There is just too much of a
difference between a 3" screen and a 10+" screen. The best that can be
done is that you use the same language and tools to develop two differnet
The programs that I want to write cannot be done with Flash. I least I don't
know how to do them. And they are difficult to do with Swing. But are easy
and fun to do with JavaFX.
I do have high hopes that soon JavaFX will have a quick start up time from
browsers time and a solid and reliable web deployment using any browser.
I'm expecting this will be possible by the end of the year.
Kicking JavaFX is like kicking a really promising puppy.
Wake Up and Smell The Coffee
Please understand what a scene graph is first? A scene graph is a data structure of descriptive object nodes that in themselves represent abstract graphics declaratively that are rendered through runtime (software and/or hardware pipeline) to produce graphic primitives on the target display device.
JavaFX is designed to support a scene graph
JavaFX is a Domain Specific Language
Swing was not designed to support a scenegraph runtime. It uses ``immediate mode graphics'' with GraphicsContext (AWT and Java 2D) as it underlying technology. Immediate mode graphics programming has been around since the 1980's with Windows Handles, X Windows Contexts, Borland Graphic Unit Contexts and of course Java AWT Graphics2D context.
Swing was designed to be an emulation of windows user interface technology of the period, the classic WIMP model (Windows Input Mouse and Pointer).
Smell the real coffee with the new kinds of UI/UX that you already know about to hit the streets. The Apple iPad is foregoing the traditional UI/UX of WIMP. It is a new style of consumer device with a touchscreen. Surely you do not think that Swing 2.0 will be able to execute on these devices or other slates (that you might be using in the five years). If you do then you are a dumb .....
With devices like Apple iPhone / Google Nexus you all know about the graphics objects that seemlessly rotate, scale, translate and shear; and can perspectively rotate. How on earth do they do that? You might have wondered in your mind. I hope you probably know that there is a programming model and graphics pipeline that makes what you see on iPhoneOS a doddle to program. It would be very hard and difficult to take a Swing UI 2.0 and develop it now to the iPad (or another other forthcoming competiting i-slate). This is why JavaFX was invented, or rather Christopher Oliver of See Beyond, created an experiment called Form-Follows-Function (F3) that in prototypical terms set the stall out for JavaFX. His research endeavours to build a language to manipulate a scene graph , see his blog on the older blog.sun.com, pre-date the announcement of the first generation Apple iPhone in January 2007 WWDC. Plus we all know that Chris Oliver and Apple were separated by concerns and could not be influenced by each other, in anyway.
Simply put, the new UI/UX mode is to have a runtime that supports a combined 2D/3D scenegraph runtime, which is performant and takes advantage of 3D graphics GPUs. If Tony Blair mentioned once: education, education, education and Bill Clinton mentioned once, the economy, economy, economy then please believe me, with JavaFX, and this including another graphics RIA solution, it is all about now the performance, performance, performance. Why? Because Apple are setting the agenda in this game. They just did in 2010 with the new Fangled Apple iPad. The demos were stunning when I had a change to watch them as podcast on iTunes. Flex, Silverlight and even JavaFX had better catch up.
I realise there are wide spread confusions here are that people think that JavaFX can only run inside a browser, or it is based on extension of Swing, or about a fluffy stackitecture and the runtime. The real prize to be able write RIA that can ported/target to a multiple of devices (screen) in one DSL and one runtime. This is the rocket science that everyone has to understand.
We are waiting for Oracle to finish the work that Chris Oliver started. Produce a Java/JavaFX runtime that supports scenegraphs and replaces the old fashion Abstract Windowing Toolkit (pipeline circa 1995) and then it will contain combined 2D and 3D graphics. This runtime is called tentatively by Oracle, "The PRISM Runtime" and it will solve not only JavaFX but also Java Runtime Environment (JRE). That's right even those m****f***rs of b**k*rs will be able to download the JRE with the Prism ``Stackitecture''. If they want they still run little bitty Java Plug-in based financial trading applications, while the rest of us can work with a scenegraph enabled FX. Once Oracle release this code and the platform, I bet that Java on the desktop will be blooming fast! Then all they need to do is port it to devices. Ok Apple won't allow byte code interpreters or virtual machines to run in their walled garden with Java or even Flash. However If Oracle ever makes a deal with Google, and then with Android, to port the JavaFX runtime over there to those mobile devices. I think we will be laughing really hard. Finally JavaFX is still based on ideal of WORA, your JavaFX desktop can be with of course modifications be running on JavaFX mobile device if you architected that way.