Hello!

I've been using Swing for many years. One of the things I like most
about it is that it's essentially guaranteed to be present in any Java
SE installation, and although it's a little outdated aesthetically, it
works well and continues to work well.

I've been exploring the possibility of migrating to JavaFX on and off,
but the biggest showstopper for me is that JavaFX may not actually be
present in any given user's installation. If someone installs the
jre9-openjdk package on Arch Linux, for example, they don't get JavaFX.
If they install the java-openjfx package, they do (although Arch only
offers JavaFX 8 right now).

I'm migrating to Java 9 modules, and all new projects will be fully
modular projects. In the olden days (pre Java 9), it was possible to
detect if JavaFX was present with a reflection hack:

try {
  Class jfxPanel = classLoader.loadClass("javafx.embed.swing.JFXPanel");
  isJavaFxAvailable = true;
} catch (ClassNotFoundException e) {
  isJavaFxAvailable = false;
}

The idea being that you could at least display a friendly error message
to the user explaining that they need to install JavaFX if they're
using OpenJDK.

But obviously in a Java 9 project, that's not going to work: You'd need
to specify a "requires" clause on the JavaFX modules, and if they
weren't present, the VM wouldn't even start up so the above check
wouldn't get a chance to run.

For applications, I could probably try to bundle JavaFX with them
(although there may be licensing issues there). For libraries, I'm out
of luck. The only apparent option there is for me to pick a set of
Maven coordinates like "org.openjdk:javafx:8.0" and specify those in my
libary's POM file (and assume that the user is smart enough to deploy
JavaFX to a local repos to use it).

I suppose what I'm really saying is: When (if ever) can I expect JavaFX
to be present unconditionally with OpenJDK installs? I probably can't
migrate to JavaFX until that day...

-- 
Mark Raynsford | http://www.io7m.com

Reply via email to