我正在用 Java 编写一个程序,该程序将命令发送到 C 程序并读取其输出,但是当我尝试实际读取输出时,我发现它挂起。代码是:
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() 调用的程序的窗口?这样当我向它发送字符串或从其输出中读取时,我可以检查是否还有其他问题。