Deploying Standalone JavaFX Applications Without Runtime Dependencies
JavaFX has slashed multiple layers of complexity off the process of development of rich client applications for the JVM. However, at the same time it has added another layer of complexity to their deployment, especially deployment of standalone applications. Now, not only (the right version of) the JRE must be already present on enduser systems, downloaded at install time, or bundled with the application, but also the JavaFX Runtime, and it better be the right version too!
One of the key selling points of Excelsior JET is streamlining of the Java application deployment process through the elimination of JRE dependency. Starting from version 7.0, the removal of JavaFX dependency will be nearly as straightforward, and you will also have your code protected against reverse engineering.
A public beta of Excelsior JET 7.0 is already available, so I have put together a JavaFX Knowledge Base article and then followed it myself to create a zero-dependency Windows setup package for JavaFX 1.2 SDK samples. (The InterestingPhotos sample is missing as I have no Flickr API key and had no time to figure it out.)
Do you develop standalone JavaFX applications? What do you think of the above?
P.S. It is possible to compile JavaFX apps with the current Excelsior JET 6.5, but you have to pack the application jar into the executable with classes, otherwise the application won’t find its own resources. This workaround will not be required in 7.0, thanks to a new feature.
Tags: deployment, javafx

November 7th, 2009 at 3:57 pm
This would be what I was looking for, for a long time. But how is the licensing of javafx jars handled? As far as I know, you cannot redistribute javafx jar(s), so the only option is to let them be downloaded on application start, via JNLP preferably. I run Mac OS X so I cannot see Excelsior JET at work my self.
November 9th, 2009 at 3:25 pm
Sounds great! But I wonder the same as lukaszb; how is the javafx redistribution licensing handled?
regards!
/Ole
eviware.com
November 9th, 2009 at 11:00 pm
That’s cool!
Any idea why the DisplayShelf sample is so sluggish? The other samples run very smoothly (for being JavaFX)..
November 13th, 2009 at 10:58 am
@lukazb, Ole: That’s a very good question. It seems that I was a bit ahead-of-time (pun intended) with this announcement. For some reason, I assumed that the JavaFX Runtime license allows redistribution, just like the JRE binary license, especially given the Sun’s promises to open-source it. Now I see that it is not the case, in particular due to third-party code such as media codecs, and Sun has other things to do at the moment, so I do not see this resolving any time soon.
November 13th, 2009 at 11:11 am
@viktorn: No idea really. I have just run it on a legacy system (Celeron 2GHz/512MB RAM/Radeon 9550) with commit charge exceeding the physical memory size thanks to the memory pig called Firefox, and although it took almost forever to start it was responsive after that.
My only guess it that it may be JITting some classes on your system. You can check that as follows:
Modify the executable header to enable console. If you have Excelsior JET installed, just run
gui - JavaFX-1.2-samples.exein the samples installation directory.Run the sample using a bat file:
set JETVMPROP=-Djet.jit.loudJavaFX-1.2-samples.exe displayshelf.Main
On my system, it says:
JITCompiler: compile $Proxy0
JITCompiler: compilation finished in 31ms, classes: 1
*** JIT: $Proxy1
JITCompiler: compile $Proxy1
JITCompiler: compilation finished in 31ms, classes: 1
*** JIT: $Proxy2
JITCompiler: compile $Proxy2
JITCompiler: compilation finished in 16ms, classes: 1
*** JIT: $Proxy3
JITCompiler: compile $Proxy3
JITCompiler: compilation finished in 31ms, classes: 1
*** JIT: $Proxy4
JITCompiler: compile $Proxy4
JITCompiler: compilation finished in 32ms, classes: 1
JITCompiler: total compilation time: 141ms, classes: 5
I would say 141 ms is negligible.