ProcessBuilder не может найти указанный файл, в то время как процесс может


Я пытаюсь запустить файл jar из программы Java, и мне это удается с помощью getRuntime():

Process processAlgo = Runtime.getRuntime().exec("java -jar "+algoPath);

Однако, когда я пытаюсь использовать ProcessBuilder, я получаю исключение The system cannot find the file specified:

ProcessBuilder builder = new ProcessBuilder("java -jar " + algoPath);
Process processAlgo = builder.start();

Я попытался изменить расположение указанного файла, а также указал его полный путь, но это не сработает. Что могло вызвать эту проблему?

2 2

2 ответа:

ProcessBuilder ожидает, что его параметры будут передаваться отдельно.

То есть для каждой команды и аргумента ProcessBuilder ожидает увидеть его как отдельный параметр.

В настоящее время вы говорите ему запустить "java-jar what ever the value of algoPath is"...что, с точки зрения ProcessBuilder, является недопустимой командой.

Попробуй...

ProcessBuilder builder = new ProcessBuilder("java",  "-jar", algoPath);
Process processAlgo = builder.start();

Вместо этого.

Если algoPath содержит пробелы (т. е. более одного аргумента), их также необходимо разделить на отдельные параметры, в противном случае ваша программа не будет выполняться, так как Java будет видеть algoPath как один параметр.

Регистрация документации подробнее

Да, "java" должен быть вашим первым параметром, и каждый другой аргумент должен быть отправлен в другом параметре.

У меня была проблема с выполнением этой строки "bash /path/script.sh арг1 арг2"... потому что первый параметр я проходил был "Баш - /path/script.sh", "аргумент1", "значение arg3"... получение исключения: команда не найдена JAVA.

Когда я отделял в параметрах каждый элемент, то работал нормально. "Баш", "/путь/скрипт", "аргумент1", "аргумент2".