I installed OpenJDK-11 as described here.
I ran sudo apt install openjfx
My java version:
$ java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu1, mixed mode, sharing)
But still I get ava.lang.NoClassDefFoundError: javafx/application/Application
which indicates that the jre cannot find the FX classes.
You are getting this error because your runtime PATH to
javafx
is probably incorrect or missing.Please, follow these steps:
Check the path of JavaFX. (example:
/usr/share/openjfx/lib/
)Then run command:
where
$FX-PATH
should be set or replaced with mentioned JavaFX path.If you need to add more modules, you can specify them in
--add-modules
parameter.(
--add-modules javafx.controls,javafx.fxml
)Java FX is no longer packaged with the Java runtime. You must download and package the Jar with JavaFX runtime, see https://openjfx.io/openjfx-docs/ in order to learn how best to get this up and running.
I recommend you to go with https://openjfx.io/openjfx-docs/ .i am using Eclipse IDE but it works for all IDE
Then you can refer to this global variable when setting the VM options as:
In IDE Right-click on project->Run As -> Run Configuration ->Arguments->VM Arguments
For Windows,
For Linux,
You might be encountering this problem because you're trying to run JavaFX from Kotlin via command line. As Kotlin uses its own URLClassLoader that isn't populated by the underlying JVM's system classloader as parent, JavaFX classes will not be found when JavaFX is present in the underlying JVM (for example because the JVM is Azul Zulu 18 with JavaFX included) implicitly but not explicitly on the classpath.
The workaround is to create your own URLClassLoader with the same URLs as Kotlin's ClassLoader, using the JVM's system classloader as parent, and then use that via Reflection.
Here's an example of how to do that with an additional
main()
method.I've tested this with Kotlin 1.7.10 and Azul Zulu 18.0.2.fx on Kubuntu 22.04.