无法 运行 程序 "C:\Program Files\Java\jdk1.8.0_221\jre\bin\java" 无效的目录名称
Cannot run program "C:\Program Files\Java\jdk1.8.0_221\jre\bin\java" Invalid directory name
我有一个 "slave" 程序和一个 "master" 程序。主程序正在执行从程序,然后,从程序正在执行另一个程序(外部程序)。它可以在不结束外部程序的情况下重新启动主程序。
但这是我的问题:
我可以使用 processbuilder 运行 来自主程序的从程序,但是从程序无法通过他的 processbuilder 找到 java。
我弄错了吗?
我已经尝试过更改从执行目录和主执行目录。但是没有变化。
硕士 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 的 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) {
<...>
}
这是我的实际输出:
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
我只想让slave的processbuilder工作。
感谢您以后的帮助!
我找到问题了!
感谢 VivekRatanSinha!
服务器在 servers/minecraft/Hellow 不在 server/minecraft/Hellow/minecraft
我在我的奴隶的 processbuilder 中使用了
pb.directory(new File("servers/minecraft/" + args[0]));
但是 args 0 是总路径而不是服务器名称!
我刚改成
pb.directory(new File(args[0]));
现在一切正常。
我有一个 "slave" 程序和一个 "master" 程序。主程序正在执行从程序,然后,从程序正在执行另一个程序(外部程序)。它可以在不结束外部程序的情况下重新启动主程序。 但这是我的问题: 我可以使用 processbuilder 运行 来自主程序的从程序,但是从程序无法通过他的 processbuilder 找到 java。 我弄错了吗?
我已经尝试过更改从执行目录和主执行目录。但是没有变化。
硕士 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 的 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) {
<...>
}
这是我的实际输出:
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
我只想让slave的processbuilder工作。 感谢您以后的帮助!
我找到问题了! 感谢 VivekRatanSinha!
服务器在 servers/minecraft/Hellow 不在 server/minecraft/Hellow/minecraft
我在我的奴隶的 processbuilder 中使用了
pb.directory(new File("servers/minecraft/" + args[0]));
但是 args 0 是总路径而不是服务器名称!
我刚改成
pb.directory(new File(args[0]));
现在一切正常。