01: the goal
I want to run a JavaFX project B from a JavaFX project A
02: config
linux, eclipse, openJDK17
03: information
When i run a Java project B (HelloWorld printed into console), project A compiles, runs and runs project B, it works
Here the instructions:
//
ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java", "HelloWorld.java");
//
process01.directory(new File("../HelloWorld/src/org/example/"));
//
return process01
.inheritIO()
.start()
.waitFor();
04: information
The JavaFX project B is only a Stage with a Button and a TextField, you click Button and the date appears into the TextField.
05: information
i tried with Liberica Full JDK 18, with Oracle JDK 18
06: information
i tried to change JREs into eclipse
07: information
i tried to add project B into ClassPath's project A
i tried to add project B into ModulePath's project A
08: the code to run JavaFXproject B from JavaFX project A (many attempts, do not work)
@FXML
private void executerFichierJava02() {
//
System.out.println("");
System.out.println("method: executerFichierJava02()");
System.out.println("create 1 Service and 1 Task");
System.out.println("return 1 ProcessBuilder to");
System.out.println("execute 1 Java class (from project JavaFX_Test02_Desvstory)");
final Service<Integer> service01 = new Service<Integer>() {
// --- step 03, override createTask() method
@Override
protected Task<Integer> createTask() {
return new Task<Integer>() {
// --- step 04, override call() method
@Override
protected Integer call() throws Exception {
// Java link: /usr/lib/jvm/java-17-openjdk-amd64/bin/java
// JRE java-17-openJDK
/*
try {
// Class.forName("applicationShowDate.Main.java");
// Class.forName("/media/sambano/home_HDD_EXTERNE/Documents/java/workspace_eclipse/JavaFX_Test02_Desvstory/src/applicationShowDate/Main.java");
}
catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
*/
// compilation: 14 errors
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/javac", "Main.java");
// service 01, failed
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java --module-path /usr/lib/jvm/java-17-openjdk-amd64/lib/jrt-fs.jar\" --add-modules=javafx.controls.jar --add-modules=javafx.base.jar --add-modules=javafx.fxml.jar --add-modules=javafx.graphics.jar --add-modules=javafx.media.jar --add-modules=javafx.swing.jar --add-modules=javafx.web", "Main.java");
// service 01, failed
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java --module-path /usr/lib/jvm/java-17-openjdk-amd64/lib/jrt-fs.jar --add-modules=javafx.controls.jar --add-modules=javafx.base.jar --add-modules=javafx.fxml.jar --add-modules=javafx.graphics.jar --add-modules=javafx.media.jar --add-modules=javafx.swing.jar --add-modules=javafx.web", "Main.java");
// service 01, failed
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java --module-path /usr/lib/jvm/java-17-openjdk-amd64/lib/jrt-fs.jar --add-modules=javafx.controls.jar --add-modules=javafx.base.jar --add-modules=javafx.fxml.jar --add-modules=javafx.graphics.jar --add-modules=javafx.media.jar --add-modules=javafx.swing.jar --add-modules=javafx.web, --add-modules=javafx-swt.jar", "Main.java");
// service 01, failed
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/javac --module-path /usr/lib/jvm/java-17-openjdk-amd64/lib/jrt-fs.jar\" --add-modules=javafx.controls.jar --add-modules=javafx.base.jar --add-modules=javafx.fxml.jar --add-modules=javafx.graphics.jar --add-modules=javafx.media.jar --add-modules=javafx.swing.jar --add-modules=javafx.web", "Main.java");
// service 01, failed
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/javac -cp /usr/lib/jvm/java-17-openjdk-amd64/lib/jrt-fs.jar:/usr/lib/jvm/liberica_full_JDK18/lib/javafx.controls.jar:/usr/lib/jvm/liberica_full_JDK18/lib/javafx.base.jar:/usr/lib/jvm/liberica_full_JDK18/lib/javafx.fxml.jar:/usr/lib/jvm/liberica_full_JDK18/lib/javafx.graphics.jar:/usr/lib/jvm/liberica_full_JDK18/lib/javafx.media.jar:/usr/lib/jvm/liberica_full_JDK18/lib/javafx.swing.jar:/usr/lib/jvm/liberica_full_JDK18/lib/javafx.web", "Main.java");
// service 01, failed
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java --module-path /usr/lib/jvm/java-17-openjdk-amd64/lib/jrt-fs\" --add-modules=javafx.controls --add-modules=javafx.base --add-modules=javafx.fxml --add-modules=javafx.graphics --add-modules=javafx.media --add-modules=javafx.swing --add-modules=javafx.web", "Main.java");
// service 01, failed
// ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java --module-path /usr/lib/jvm/java-17-openjdk-amd64/lib/jrt-fs --add-modules=javafx.controls --add-modules=javafx.base --add-modules=javafx.fxml --add-modules=javafx.graphics --add-modules=javafx.media --add-modules=javafx.swing --add-modules=javafx.web, --add-modules=javafx-swt", "Main.java");
// compilation: 14 errors
ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java", "Main.java");
//
// process01.directory(new File("/media/sambano/home_HDD_EXTERNE/Documents/java/workspace_eclipse/JavaFX_Test02_Desvstory/src/applicationShowDate/"));
//
process01.directory(new File("../JavaFX_Test02_Desvstory/src/applicationShowDate/"));
//
return process01
.inheritIO()
.start()
.waitFor();
}
};
}
};
// --------------------------------------------------------
//
service01.setOnReady(event -> {
System.out.println("service 01 ready");
});
service01.setOnScheduled(event -> {
System.out.println("service 01 scheduled");
});
service01.setOnRunning(event -> {
System.out.println("service 01 running...");
});
service01.setOnSucceeded(event -> {
System.out.println("service 01, success");
});
service01.setOnFailed(event -> {
System.out.println("service 01, failed");
});
service01.setOnCancelled(event -> {
System.out.println("service 01, cancelled");
});
// --------------------------------------------------------
serviceB = service01;
serviceB.start();
}
Here the trace to show the 14 errors:
method: executerFichierJava02()
create 1 Service and 1 Task
return 1 ProcessBuilder to
execute 1 Java class (from project JavaFX_Test02_Desvstory)
par le callback, service 01 scheduled
par le callback, service 01 running...
Main.java:3: error: package javafx.application does not exist
import javafx.application.Application;
^
Main.java:4: error: package javafx.fxml does not exist
import javafx.fxml.FXMLLoader;
^
Main.java:5: error: package javafx.stage does not exist
import javafx.stage.Stage;
^
Main.java:6: error: package javafx.scene does not exist
import javafx.scene.Parent;
^
Main.java:7: error: package javafx.scene does not exist
import javafx.scene.Scene;
^
Main.java:8: error: package javafx.scene.layout does not exist
import javafx.scene.layout.BorderPane;
^
Main.java:11: error: cannot find symbol
public class Main extends Application {
^
symbol: class Application
Main.java:14: error: cannot find symbol
public void start(Stage primaryStage) {
^
symbol: class Stage
location: class Main
Main.java:13: error: method does not override or implement a method from a supertype
@Override
^
Main.java:17: error: cannot find symbol
Parent root = FXMLLoader.load(getClass().getResource("/applicationShowDate/fenetrePrincipale.fxml"));
^
symbol: class Parent
location: class Main
Main.java:17: error: cannot find symbol
Parent root = FXMLLoader.load(getClass().getResource("/applicationShowDate/fenetrePrincipale.fxml"));
^
symbol: variable FXMLLoader
location: class Main
Main.java:17: error: cannot find symbol
Parent root = FXMLLoader.load(getClass().getResource("/applicationShowDate/fenetrePrincipale.fxml"));
^
symbol: method getClass()
location: class Main
Main.java:24: error: cannot find symbol
primaryStage.setScene(new Scene(root));
^
symbol: class Scene
location: class Main
Main.java:33: error: cannot find symbol
launch(args);
^
symbol: method launch(String[])
location: class Main
14 errors
error: compilation failed
par le callback, service 01, etat, success
Many comments to show you, instructions i tried.
As i said, i already tried to change JDKs, JREs, to set JavaFX project B into ClassPath and/or ModulePath's JavaFX project A.
i also tried this link
https://openjfx.io/openjfx-docs/#install-javafx
tried into Terminal but without changing PATH_TO_FX
here the command line:
java --module-path /media/sambano/home_HDD_EXTERNE/Documents/java/workspace_eclipse/JavaFX_Test29_Threads_Services_Processes/utilitaires/javafx-sdk-18.0.1/lib --add-modules javafx.controls,javafx.fxml,javafx.base,javafx.graphics /media/sambano/home_HDD_EXTERNE/Documents/java/workspace_eclipse/JavaFX_Test29_Threads_Services_Processes/src/application/Main.java
i setted back to openJDK17 with it's JRE, deleted JavaFX Project B from ModulePath and ClassPath's Project A just to get a clean situation (to avoid misunderstandings).
i'd like to not use .jar
Is there a way you to tell me a step by step to reach the goal? any advices? or ideas?
Thank you.