我試圖在自己的控制檯窗口中運行plink。我開始使用Process.exec(),並且工作正常。我轉向使用ProcessBuilder,現在輸出不會發出,直到我終止進程。使用進程生成器重定向進程輸出
我的代碼如下所示:
class ConsoleOutputThread extends Thread {
public void start(String processName) {
// this was old code: Runtime r = Runtime.getRuntime();
try {
builder = new ProcessBuilder("plink", "-ssh", "192.168.3.21");
builder.redirectErrorStream(true);
process = builder.start();
//this was old code: process = r.exec (processName);
} catch (IOException ex) {
}
start();
}
@Override
public void run() {
try {
BufferedReader is = new BufferedReader(new InputStreamReader(process.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
try {
process.waitFor();
} catch (InterruptedException ex) {
}
char b[];
b = new char[1];
while(is.read(b, 0, 1)> 0) {
// this is for debug, normally sent to console
System.out.println("Got character: " + b[0]);
}
} catch (IOException ex) {
}
}
}
因此,在使用的Runtime.exec()時,一切運行良好。現在,使用ProcessBuilder,讀取功能會永遠阻止(實際上,直到我終止進程時,當進程被拋出時)。但是,錯誤流的作用,即如果我把一個錯誤的選項,我得到的消息在控制檯。 我可能在這裏錯過了一些東西並尋求幫助。 謝謝
你是否flush()你的流? –
可能重複的[Process.waitFor(),線程和InputStreams](http://stackoverflow.com/questions/2150723/process-waitfor-threads-and-inputstreams) – jtahlborn
顯然waitFor()會產生問題,程序掛在那裏。沒有它,它的工作 –