При запуске внешнего скрипта я хочу читать ErrorStream и OutputStream этого скрипта одновременно и отдельно, а затем обрабатывать их дальше. Поэтому я запускаю Thread
для одного из потоков. К сожалению, Process
, похоже, не waitFor
Thread
, который должен быть завершен, но возврат после того, как поток без потока не имеет никакого ввода.Process.waitFor() a thread
В двух словах, вот что я делаю:
ProcessBuilder pb = new ProcessBuilder(script);
final Process p = pb.start();
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
...read lines and process them...
}
}).start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
...read lines and process them...
int exitValue = p.waitFor();
p.getOutputStream().close();
return exitValue;
Есть ли возможность waitFor
Thread
быть прекращено?
Возможно, просто используйте [Commons Exec] (http://commons.apache.org/proper/commons-exec//) - не нужно изобретать колесо. –
Было бы полезно, если бы вы отправили свой настоящий код. Две вещи, вы никогда не запускаете поток чтения потока ввода; и вы не должны закрывать поток вывода процессов до его завершения. – Perception
@Perception: Извините за неполный и, следовательно, дефектный код. Я исправил его выше. – stan