无法运行程序“ C:\ Program Files \ Java \ jdk1.8.0_221 \ jre \ bin \ java”无效的目录名

时间:2019-08-23 08:54:25

标签: java ioexception processbuilder

我有一个“从属”程序和一个“主”程序。主程序正在执行从属程序,然后,从属程序正在执行另一个程序(外部程序)。这样就可以在不终止外部程序的情况下重新启动主程序。 但这是我的问题: 我可以使用processbuilder从主程序运行从属程序,但是从属程序无法通过其processbuilder找到java。 是我弄错了吗?

我已经尝试过更改从执行目录和主执行目录。但是没有变化。

Master的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) {
            <...>
        }

从属的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

我只希望从属的processbuilder工作。 感谢您日后的帮助!

1 个答案:

答案 0 :(得分:1)

我发现了问题! 感谢VivekRatanSinha!

服务器不在server / minecraft / Hellow中,而在server / minecraft / Hellow / minecraft中

我在奴隶的processbuilder中使用

pb.directory(new File("servers/minecraft/" + args[0]));

但是参数0是总路径而不是服务器名称!

我刚刚将其更改为

pb.directory(new File(args[0]));

现在工作正常。