Как я могу использовать командную строку в java-программах?

public static void main(String args[]) { try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("mvn -version"); InputStream stderr = proc.getErrorStream(); InputStreamReader isrerr = new InputStreamReader(stderr); BufferedReader brerr = new BufferedReader(isrerr); InputStream stdin = proc.getInputStream(); InputStreamReader isrin = new InputStreamReader(stdin); BufferedReader brin = new BufferedReader(isrin); String line = null; while ((line = brerr.readLine()) != null) System.out.println(line); while ((line = brin.readLine()) != null) System.out.println(line); int exitVal = proc.waitFor(); } catch (Throwable t) { t.printStackTrace(); }
}

этот код не работает, нет выхода, и процесс не может остановить.

помогите мне! thank advance.I хочу выполнить команду maven в java-программе, вызывая командную строку, но она выводит ошибку: выводит ошибку java.io.IOException: не удается запустить программу "mvn": но если я запустил ту же команду int в командной строке, он работает хорошо.

1 ответ

Вы должны получить выход процесса с proc.getInputStream()

Если вы не знаете, что ваша программа всегда возвращает тривиальные объемы вывода, лучше всего читать как поток ошибок, так и поток ввода в отдельных потоках.

Затем используйте proc.waitFor() и получите результат из потоков чтения.

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

Пример кода: import java.io. *;

public class Test { static class StreamReader extends Thread { InputStream stream; StreamReader(InputStream stream) { this.stream = stream; } public void run() { try { InputStreamReader isr = new InputStreamReader(stream); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) System.out.println(line); } catch (Throwable t) { t.printStackTrace(); } } } public static void main(String args[]) { try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("mvn -version"); new StreamReader(proc.getInputStream()).start(); new StreamReader(proc.getErrorStream()).start(); int exitVal = proc.waitFor(); } catch (Throwable t) { t.printStackTrace(); } }
}

licensed under cc by-sa 3.0 with attribution.