I have a "slave" program and a "master" program. The master program is executing the slave, and then, the slave is executing another program (an external program). It makes possible the reboot of the master program without ending external programs. But this is my problem : I can run the slave program from the master program using processbuilder, but the slave can't find java with his processbuilder. Made I a mistake ?
I've already tried to change the slave execute directory and the master executing directory. But no changes.
Master's Processbuilder
final String javaCmd = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
final List<String> bpArgs = new ArrayList<>();
bpArgs.add(javaCmd);
bpArgs.add("-jar");
bpArgs.add(gameServer.getSlavePath());
bpArgs.add("servers/" + gameServer.getName().toLowerCase() + "/" + serverName);
bpArgs.add(gameServerVersion.executable);
final ProcessBuilder pb = new ProcessBuilder(bpArgs);
pb.directory(new File("").getAbsoluteFile()); // Run into the current directory
try {
final Process p = pb.start();
<...>
} catch (IOException e) {
<...>
}
Slave's Processbuilder
final String javaCmd = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
List<String> bpArgs = new ArrayList<>();
bpArgs.add(javaCmd);
// TODO: Add RAM args
// Game args
bpArgs.add("-Dcom.mojang.eula.agree=true");
bpArgs.add("-DIReallyKnowWhatIAmDoingThisUpdate=true");
bpArgs.add("-jar");
bpArgs.add(args[1]); // executable JAR file
log("Starting with arguments >>> " + bpArgs.toString());
final ProcessBuilder pb = new ProcessBuilder(bpArgs);
pb.directory(new File("servers/minecraft/" + args[0])); // Run into the game directory
try {
p = pb.start();
<...>
p.waitFor();
log("Server stopped with exit code " + p.exitValue());
} catch (InterruptedException e) {
<...>
} catch (IOException e) {
<...>
}
This is my actual output :
java.io.IOException: Cannot run program "C:\Program Files\Java\jdk1.8.0_221\jre\bin\java" (in directory "servers\minecraft\servers\minecraft\Hellow"): CreateProcess error=267, Invalid directory name
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at eu.gameinbox.svm.slave.MinecraftSlave.main(MinecraftSlave.java:33)
Caused by: java.io.IOException: CreateProcess error=267, Invalid directory name
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 1 more
I just want the slave's processbuilder to work. Thanks for your future help !
I've found the problem ! Thanks to VivekRatanSinha !
The server was in servers/minecraft/Hellow not in server/minecraft/Hellow/minecraft
In my slave's processbuilder I used
pb.directory(new File("servers/minecraft/" + args[0]));
But the args 0 was the total path not the server name !
I just changed it to
pb.directory(new File(args[0]));
And now it works fine.