我正在用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