i want to execute a projectB from a projectA with 2 ProcessBuilder. It works but i have to comment first ProcessBuilder to execute second.
here my first code (only 1 file named F04_C.java)
@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>() {
// override createTask() method
@Override
protected Task<Integer> createTask() {
return new Task<Integer>() {
// override call() method
@Override
protected Integer call() throws Exception {
// first ProcessBuilder
ProcessBuilder process01 = new ProcessBuilder("/usr/bin/javac", "-d", "./out", "../JavaFX_Test01_Hello_Devstory/src/module-info.java", "../JavaFX_Test01_Hello_Devstory/src/application/Main.java");
// second ProcessBuilder
ProcessBuilder process01 = new ProcessBuilder("/usr/bin/java", "-p", "./out", "-m", "JavaFX_Test01_Hello_Devstory/application.Main");
return process01
.inheritIO()
.start()
.waitFor();
}
};
}
};
// step start Service
serviceB = service01;
serviceB.start();
}
already said:
i have to comment first or second ProcessBuilder, i can not run the program with both instructions. So after researches i found a link to help me to get my goal. How to return 2 values from a Java method?
it tells to create a class (the best way) to return the instance i want to return.
So, with the link above i wrote a class to return 2 ProcessBuilder
i show you the class file and the updated F04_C.java file
package application.model;
public class ClassPB {
//
private ProcessBuilder pb01 = new ProcessBuilder();
private ProcessBuilder pb02 = new ProcessBuilder();
// constructeur(s)
public ClassPB(ProcessBuilder p_pb01, ProcessBuilder p_pb02) {
this.pb01 = p_pb01;
this.pb02 = p_pb02;
}
// getter(s)
public ProcessBuilder getPB01() {
return this.pb01;
}
public ProcessBuilder getPB02() {
return this.pb02;
}
}
the F04_C.java updated
@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>() {
// override createTask() method
@Override
protected Task<Integer> createTask() {
return new Task<Integer>() {
// override call() method
@Override
protected Integer call() throws Exception {
ClassPB pbCombines = something();
return pbCombines;
}
};
}
};
serviceB = service01;
serviceB.start();
}
public static ClassPB something() {
ProcessBuilder pb01 = new ProcessBuilder("/usr/bin/javac", "-d", "./out", "../JavaFX_Test01_Hello_Devstory/src/module-info.java", "../JavaFX_Test01_Hello_Devstory/src/application/Main.java");
ProcessBuilder pb02 = new ProcessBuilder("/usr/bin/java", "-p", "./out", "-m", "JavaFX_Test01_Hello_Devstory/application.Main");
try {
pb01
.inheritIO()
.start()
.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
pb02
.inheritIO()
.start()
.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new ClassPB(pb01, pb02);
}
But now i have a problem: i have to return an Integer and i don't know how to solve this. Any advices, clues?
Thank you