Wednesday, May 09, 2007

JavaFX or SwingFX

Those JavaFX demos at JavaONE look great. I have been working with Swing for 10 years (9? time flies), I know what Swing can do if you put the time in. It is very tricky to make swing applications look excellent, and anything to make that simpler is awesome. It looks like JavaFX is just that, an improved way to create an interface in a Java application. But JavaFX is being talked about as competition to Silverlight, Apollo, and Flash and I am not sure about all that.

First lets think about Flash...
Why does Flash exists, what problems does it solve? Why is Flash better then an Applet? Why does Flash need to be replaced? Perhaps answering these questions will shed some light on this JavaFX thing.

Why does Flash exists, what problems does it solve?
Flash exists because DHTML/AJAX/etc is extremely limited in terms of precise layout, animation and media. Both Flash and applets improve upon this serious set of limitations.

Why is Flash better then an Applet?
Flash has a quicker startup time and might be on a few more browsers. Java however has a bijillion open source projects available, has a much better security model, higher graphics fidelity and once loaded is much faster then Flash. Java to me looks like the bester answer for a rich web experience, yet many many more web sites use Flash then Java. Why?
Tools. Flash has better tools then Java for creating rich interfaces. I think this is the only reason why Flash is everywhere and Applets are not. The tools available for Flash allow an amateur to create amazing web pages. Flash programming may be the tonka truck of programming languages, but it is very accessible. If JavaFX is going to compete it must create the best tools on the market.

Why does Flash need to be replaced?
If Flash has great tools and is easy to program why does it need to be replaced at all? Some of the advantaged of Java over Flash that I listed above are all good reasons to replace Flash. Maybe Ill just download the source code to Flash and make some improvements, improve the speed of Flash so it is on par with Java....oh right, I can't. Java is the first rich web technology available with an open licenses, this is big. Java already has a slew of open source projects written with it, that is work that has been done for you. Need a bar code reader in your application, I bet you can find five open source libraries for that, try that with Flash. As Java moves back into the rich interface space, a ton of projects will pop-up to make your application easier to write AND look better.

Silverlight and Apollo
When I heard about these projects, I thought to myself, "Lucas, why would you ever use these platforms when you can use Java?" and then I thought about it some more. Adobe is trying to expand the usefulness of the Flash programmers in the world and leverage their existing tools. This makes perfect sense and is a really good move, reusing the resources they have for a new market. Silverlight, looks like JavaLite to me, the last time I tried to use a MS tool for creating software I was struck by how buggy and feature poor everything was. I was trying to get a C# mobile application to unzip a file and wow, I was of the track and in the weeds, this was nearly unexplored territory in the world of .NET. Seriously, go download Visual Studio and the Mobile add on, you will swear your the first person to every actually use it.

To compete with Adobe in both the browser and desktop space Sun must make tools for creating rich applications on par with Adobe's. If we also get a tool for creating mobile and embedded applications at the same time that would be slam dunk for Sun. Until then, content creators will not choose Java regardless of how handy/fast/ubiquitous Java is. Silverlight is irrelevant, a billion people will be forced to use it in classic Microsoft style, it will be buggy and expensive. Sun could make the best platform in the world and they would still be stuck competing with Microsoft.
Until I see the tools to compete Adobe, JavaFX as a clever way of creating Swing components, with all the same limitations that come with Swing Applications and Applets.