Невозможно выполнить команды Java с помощью Processbuilder - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь запустить файл класса Java из другой программы Java.

Это моя программа:

import java.io.File;
import java.io.IOException;
import java.lang.ProcessBuilder.Redirect;
public class RunJava {
    public static void main(String[] args) throws IOException {
        ProcessBuilder pb = new ProcessBuilder("java","HelloWorld");
        pb.directory(new File("/home/local/prasanth-8508"));
        pb.redirectOutput(Redirect.INHERIT);
        pb.redirectError(Redirect.INHERIT);
        pb.start();
    }
}

После запуска этой программы я получаю следующую ошибку:

Исключение в потоке "main" java.io.IOException: Невозможно запустить программу "java"

Но когда я запускаю любые команды java из моего терминала, они работают абсолютно нормально.

Еще одна вещь, которую я обнаружил, - когда я запускаю команду: echo $PATH в моем терминале и с помощью ProcessBuilder (ProcessBuilder pb = new ProcessBuilder("bash","-c","echo $PATH");), они показывают разные выходные данные. т.е. путь к jdk / bin не отображается в команде ProcessBuilder.

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 04 июля 2019

Да, как сказал @MichaelBerry, возможно, у вас нет разрешения на доступ к нему, но кроме того, что я также хочу включить,

Здесь вы начали с очень хорошего ProcessBuilder , вам просто нужно изменить небольшие вещи, такие как параметр -jar в конструкторе processBuilder.

Я разместил ниже пример кода, который может помочь вам понять, как он будет работать.

ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
...