0

我正在用 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() 调用的程序的窗口?这样当我向它发送字符串或从其输出中读取时,我可以检查是否还有其他问题。

4

1 回答 1

0

当你调用readLine()BufferedReader 时会阻塞,直到输出中有一个换行符'\n'。尝试从终端/命令行调用 C 程序,看看输出是否真的在新行中终止。

或者,您可以一次只read(1)使用一个字符(不需要BufferedReaderthen)并立即打印。

编码不影响'\n'字符。

于 2012-06-29T19:05:57.023 回答