Javaでコマンドラインプログラムのターミナルラッパーを作成していますが、ProcessBuilderを使用してサブプロセスを生成しています。サブプロセスにキーストロークを送信するには、e.getKeyChar()
をGUIから直接OutputStream
(proc.getOutputStream()
)に書き込んでください。私はすぐに両方端に出力をフラッシュ場合Java:プロセスからstdoutデータを取得できません。手動でフラッシュしない限り
while ((b = br.read()) != -1) {
System.out.println("Read "+b);
bb[0] = (byte) b;
// call an event listener with the read byte
listener.dataReceived(bb);
}
これは動作しますが、のみ:サブプロセスからの出力を受け、私は基本的にサブプロセスのstdout
から読み込むwhileループを持っています。つまり、すべてのユーザー入力をフラッシュしなければならず、サブプロセスは自分自身をフラッシュする必要があります。stdout
そうでなければ、read()
ブロック、実際には送信されないデータを待っています(サブプロセスのstdoutは単にバッファリングを続けます)。 I/Oはどのようにして入手できますか?
例の端末サブプロセスは:
#include <stdio.h>
int main() {
char c;
while((c = getchar()) != -1) {
printf("Got: %d\n", c);
// doesn't work in my Java program if the next line isn't present
fflush(stdout);
}
return 0;
}
私は、データがディスクに書き込まれるまであなたはファイルからデータを読み取ることができないのSun Java 6
私のJavaプログラムでは、I/O * never *が送信されますが、手動でサブプロセスを端末で実行すると、I/Oはほぼ即座に実行されます。 – erjiang
ええ、我々はそれに対処しなければならないことを知っている。問題はどういうことか。 – jononomo