0

コマンドを C プログラムに送信し、その出力を読み取る Java のプログラムを作成していますが、実際に出力を読み取ろうとするとハングすることがわかります。コードは次のとおりです。

    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

BufferedReaderを呼び出すと、出力にreadLine()改行文字が含まれるまでブロック'\n'されます。端末/コマンド ラインから C プログラムを呼び出してみて、出力が実際に新しい行で終了するかどうかを確認してください。

read(1)または、一度に 1 文字だけ( BufferedReaderthen は必要ありません)、すぐに印刷することもできます。

'\n'エンコーディングは文字に影響しません。

于 2012-06-29T19:05:57.023 に答える