我正在用Java編寫一個程序,它將命令發送到C程序並讀取其輸出,但是當我嘗試實際讀取輸出時發現它掛起。 的代碼是:當從C程序讀取輸出時,BufferedReader掛起
import java.io.*;
public class EsecutoreC {
private String prg;
OutputStream stdin=null;
InputStream stderr=null;
InputStream stdout=null;
BufferedReader br;
Process pr;
public EsecutoreC(String p){
prg=p;
try {
pr=Runtime.getRuntime().exec(prg);
stdin=pr.getOutputStream();
stderr=pr.getErrorStream();
stdout=pr.getInputStream();
br=new BufferedReader(new InputStreamReader(stdout));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendInput(String line){
line=line+"\n";
try {
stdin.write(line.getBytes());
stdin.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public BufferedReader getOutput(){
return br;
}
}
當我需要閱讀程序的輸出,我只是用getOutput得到的BufferedReader,然後我打電話的readLine()。我看到程序掛起,因爲我在readLine調用之後放置了println,並且沒有打印任何內容。我還在C程序的每行輸出之後添加\ n。 另外,有沒有辦法顯示通過Runtime.getRuntime()。exec()調用的程序的窗口?這樣當我向它發送字符串或從輸出讀取數據時,我可以檢查是否還有其他問題。
在C程序中嘗試一些fflush(stdout)?如果沒有發送到終端,輸出可能不會被行緩衝。 –
試過了,沒有工作。它可能與編碼有關嗎? – Orgrim
如果你調用br.ready(),會發生什麼?當它返回true時,應該有用於閱讀的數據。 – Nick