0

ProcessBuilder を使用して Java アプリケーションからインタラクティブな実行可能ファイルを実行しようとしています。入力を受け取り、出力を生成してから、次の入力を待つことになっています。ここでの主な問題は、入出力ストリームです。入力を送信しても何も得られません。コードは次のとおりです。

private static Process process;
private static BufferedReader result;
private static PrintWriter input;

process = new ProcessBuilder("compile-lm", lmFile.toString(), " --score yes").redirectErrorStream(true).start();

input = new PrintWriter(new OutputStreamWriter(process.getOutputStream()), true);
input.println(message);
System.out.println(message);

result = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = new String();

while ((line = result.readLine()) != null)
{

/* Some processing for the read line */

System.out.println("output:\t" + line);
}
4

3 に答える 3

1

私はあなたのコードを試しましたが、コードに問題はありません。実行しようとしているコマンドに問題があると思います(何も返されません)。パラメータを変更するか、コマンド全体をテストするように変更してみてください。他の場所でコマンドを実行できる場合(たとえば、端末で試して、同じパラメーターで出力を確認します)

于 2012-08-01T17:02:50.463 に答える
0

プロセスへの出力ストリームを閉じてみてください。基本的に、子プロセスの出力側で発生しているバッファリングに翻弄されます。

于 2012-08-01T11:01:02.497 に答える
0

私は何度も同様の設定を使用しましたが、現在作業コピーを見つけることができません:(私の最初の本能は、リーダーを初期化する行(結果変数)を、コマンドを送信する行の前に移動することです。プロセス(input.println(message))。

于 2012-08-01T09:42:09.367 に答える