Using JavaFX with Intellij IDEA

Jonathan Woollett-light picture Jonathan Woollett-light · Nov 22, 2018 · Viewed 48.8k times · Source

I've followed a tutorial precisely and I can't seem to get it to work. The tutorial is under JavaFX and Intellij Non-modular from IDE sections: https://openjfx.io/openjfx-docs/#install-java

Here is the error message I receive when trying to run the default Intellij Idea JavaFX project:

"C:\Program Files\Java\jdk-11.0.1\bin\java.exe" --module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\lib\idea_rt.jar=53491:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\jonat\IdeaProjects\Tawe-Lib FX\out\production\Tawe-Lib FX;C:\Program Files\Java\javafx-sdk-11.0.1\lib\src.zip;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx-swt.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.web.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.fxml.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.media.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.swing.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.controls.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.graphics.jar" sample.Main
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.base not found

Process finished with exit code 1

This makes little sense to me as I can see javafx.base under lib on the sidebar: enter image description here

The path leading to jdk-11.0.1 and javafx-sdk-11.0.1:

C:\Program Files\Java

Java is installed:

C:\Users\jonat>java --version
openjdk 11.0.1 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)

JAVA_HOME variable (mentioned in guide) is set:

C:\Users\jonat>echo %JAVA_HOME%
C:\Program Files\Java\jdk-11.0.1

PATH_TO_FX variable is set:

C:\Users\jonat>echo %PATH_TO_FX%
C:\Program Files\Java\javafx-sdk-11.0.1\lib

I have really no idea where to go from here. I have followed the tutorial precisely, and it does not work. Any help would be greatly appreciated and if you require more info please just drop a comment about it.

Answer

José Pereda picture José Pereda · Nov 22, 2018

Based on the posted command line, this is what IntelliJ applies to run your project:

"C:\Program Files\Java\jdk-11.0.1\bin\java.exe" --module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml

So the issue is quite clear: In the VM options you have set verbatim what the tutorial says:

enter image description here

But you haven't applied your real path for PATH_TO_FX, as it is suggested in the picture inserted after that command in the tutorial:

enter image description here

IntelliJ doesn't resolve that variable and the module path is not set, hence you get the expected error that reveals that the JavaFX modules are not found:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found

Solution

This can be solved in two ways:

  1. Apply your path:

Edit run configurations, and in the VM options add your path:

--module-path "C:\Program Files\Java\javafx-sdk-11.0.1\lib" --add-modules=javafx.controls,javafx.fxml

Apply, and run. It should work.

  1. Add the environment variable

You can also set an environment variable. Go to IntelliJ->File->Settings->Appearance & Behavior->Path Variables, and add PATH_TO_FX, with the path to the lib folder:

enter image description here

And then you can use the literals $PATH_TO_FX$ (Does not work for IntelliJ IDEA 2021.1 (Community Edition) on Windows) or ${PATH_TO_FX} in the VM options:

--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml

Apply, and run.

Note that this is a more permanent solution that can be apply to any other JavaFX project.