Получение ошибки при выполнении команд с использованием ProcessBuilder в IntelliJ Idea - PullRequest
1 голос
/ 11 апреля 2020

IDE используется: IntelliJ
Системная ОС: Windows
Испытанные команды: ProcessBuilder, Runtime.exe c ()

Я выполняю файл Main. java (упоминается ниже ). Он прекрасно работает в терминале, но в IntelliJ выдает следующую ошибку. То же самое происходит и с ProcessBuilder, и с Runtime.exe c ().

"C:\Program Files\Java\jdk1.8.0_241\bin\java.exe"
Exception in thread "main" java.io.IOException: Cannot run program "echo": CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at TestSample.Main.main(Main.java:24)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:444)
    at java.lang.ProcessImpl.start(ProcessImpl.java:140)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 1 more

Process finished with exit code 1

Почему это происходит? Может кто-нибудь помочь мне решить эту проблему?

Main. java
    public static void main(String[] args) throws InterruptedException,IOException{

        ProcessBuilder builder = new ProcessBuilder("echo", "This is ProcessBuilder Example");
        Process p=builder.start();
        int errcode = p.waitFor();
        System.out.println("Program is executed successfully?"+(errcode == 0 ?"No":"Yes"));
        System.out.println("Echo Output:\n" + output(p.getInputStream()));

    }
    private static String output(InputStream inputStream) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(inputStream));
            String line = null;
            while ((line = br.readLine()) != null) {
                sb.append(line + System.getProperty("line.separator"));
            }
        } finally {
            br.close();
        }
        return sb.toString();
    }

Этот код получен из https://examples.javacodegeeks.com/core-java/lang/processbuilder/java-lang-processbuilder-example/

1 Ответ

2 голосов
/ 11 апреля 2020

echo не является допустимым исполняемым файлом, это команда, предоставляемая оболочкой командной строки (cmd.exe).

Чтобы запустить эту команду из других процессов, необходимо запустить cmd.exe и передать ему аргументы.

Рабочий код для Windows будет выглядеть следующим образом:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "echo", "This is ProcessBuilder Example from JCG");

Для других операционных систем вам придется заменить cmd.exe на /bin/bash, et c.

...