I'm using Eclipse 2019-03 working with jdk11. Following the javafx and Eclipse tutorial I've added jdk11 to my module path for my project. I've created a javafx11 user library with all of the javafx jars, and added it to my module path. Reference to my post on Super User
I've created this very simple JavaFX program in Eclipse in Ubuntu 18.04:
import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("hellofx.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root, 400, 300)); primaryStage.show(); } } There are no errors and it compiles, however I get this runtime error:
Error: Could not find or load main class javac Caused by: java.lang.ClassNotFoundException: javac How do I fix this so that I can run this basic program?
Edits:
java -version:
openjdk version "11.0.3" 2019-04-16 OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu218.04.1) OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu218.04.1, mixed mode, sharing) The VM arguments, as per the tutorial, I've added to my project's run configuration in Eclipse:
--module-path /usr/lib/jvm/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml
Code that worked:
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception{ Group root = new Group(); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root, 400, 300)); primaryStage.show(); } } Controller.java
package hellowFx2; import javafx.fxml.FXML; import javafx.scene.control.Label; public class Controller { @FXML private Label label; public void initialize() { String javaVersion = System.getProperty("java.version"); String javafxVersion = System.getProperty("javafx.version"); label.setText("Hello, JavaFX " + javafxVersion + "\nRunning on Java " + javaVersion + "."); } } hellowFx.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.StackPane?> <StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="hellofx.Controller"> <children> <Label fx:id="label" text="Label" /> </children> </StackPane> Project structure:
hellowFx2
bin src hellowFx2(package) Main.java Controller.java hellowfx.fxml
javacas your main classopenjfx, and under that path you have posted you can findjavafx-base.jarand other JavaFX modules and their native libraries? When you added your javafx11 library, it looks like this? Still nothing explains your error.