Как я могу использовать командную строку в 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.