Не удается запустить программу C:\Program Files\Java\jdk1.8.0_221\jre\bin\java Недопустимое имя каталога

У меня есть «ведомая» программа и «ведущая» программа. Основная программа выполняет подчиненную, а затем подчиненная выполняет другую программу (внешнюю программу). Это делает возможной перезагрузку основной программы без завершения работы внешних программ. Но это моя проблема: я могу запустить подчиненную программу из основной программы с помощью построителя процессов, но подчиненный не может найти java с помощью своего построителя процессов. Я ошибся?

Я уже пытался изменить подчиненный исполняемый каталог и основной исполняемый каталог. Но никаких изменений.

Магистр процессов

        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

Я просто хочу, чтобы процесс-строитель раба работал. Спасибо за вашу помощь в будущем!


person dandan2611    schedule 23.08.2019    source источник
comment
Существует ли каталог server\minecraft\servers\minecraft\Hellow относительно вашего текущего пути выполнения?   -  person VivekRatanSinha    schedule 23.08.2019
comment
Ага ! Папка относительных серверов находится в папке выполнения   -  person dandan2611    schedule 23.08.2019


Ответы (1)


Я нашел проблему! Спасибо VivekRatanSinha!

Сервер находился в server/minecraft/Hellow, а не в server/minecraft/Hellow/minecraft

В сборщике процессов моего раба я использовал

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

Но args 0 был полным путем, а не именем сервера!

Я просто изменил его на

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

И теперь он работает нормально.

person dandan2611    schedule 23.08.2019
comment
Я рад быть полезным :) - person VivekRatanSinha; 23.08.2019