Закройте ваш поток. Вот что заставляет тебя висеть. Я пишу такой код совсем немного.
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close(); // You need this or p can hang
p.waitFor();
Кроме того, вы позвонили launcher.redirectStandardError(true);
, так что вам действительно нужно все это, чтобы собрать вместе stdout и stderr: Весь остальной ответ неверен. Я не знаю, что вызывает тупик. Я оставляю здесь большой фрагмент кода на случай, если это какая-то странная ошибка библиотеки, и оказывается, что для ее обхода требуется метод двухпоточного чтения.
final object lock = new object();
InputStream stdout = p.getInputStream();
InputStreamReader isr = new InputStreamReader(stdout);
BufferedReader br = new BufferedReader(isr);
final InputStream stderr = p.getErrorStream();
one = new Thread() {
public void run() {
InputStreamReader isr2 = new InputStreamReader(stderr);
BufferedReader br2 = new BufferedReader(isr2);
while ((line2 = br2.readLine()) != null) {
synchronized(lock) {
System.out.println(line2);
}
}
br2.close(); // you need this or p can hang
}
};
one.start();
while ((line = br.readLine()) != null) {
synchronized(lock) {
System.out.println(line);
}
}
br.close(); // You need this or p can hang
for (;;) {
try {
one.join();
break;
} catch (InterruptedException v) {
/* if there's something that might want the main thread's attention handle it here */
}
}
p.waitFor();