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 ответа:
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".