2011-06-21 13 views
0

私は、キーストロークが終了するのを待つコマンドラインアプリケーションを持っています。 Javaからプロセスが正常に起動していますが、キーストローク(a)を送信すると何も起こりません。アプリケーションがstdinから何も受信しないように見えます。コードサンプルは次のとおりです。コマンドラインプロセスが標準入力から何も受信しない

Process p = Runtime.getRuntime().exec("\"C:\\app.exe\""); 
Thread.sleep(5000); 
OutputStream out = p.getOutputStream(); 
out.write(97); 
out.flush(); 
out.close(); 
p.waitFor(); 

コマンドラインから実行するとうまくいきます。誰もが問題が何であるか知っていますか?

ありがとうございます!

あなたは両方のストリームを読み取る必要が
+0

out.write(97)は '(byte)97'を書き込みます。それはあなたが意図したものですか? –

答えて

2

、のgetInputStreamとgetErrorStreamそうでない場合は、あなたのプログラムは、プロセスを作成JavaDoc

方法は、ネイティブのウィンドウなどの特定のネイティブプラットフォーム上の特別なプロセスのためにうまく動作しない場合があります参照、永遠にブロックされることがありますプロセス、デーモンプロセス、Microsoft Windows上のWin16/DOSプロセス、またはシェルスクリプト。作成されたサブプロセスには、独自の端末またはコンソールがありません。すべての標準io(つまりstdin、stdout、stderr)操作は、3つのストリーム(getOutputStream()、getInputStream()、getErrorStream())を介して親プロセスにリダイレクトされます。親プロセスは、これらのストリームを使用して、サブプロセスへの入力を提供し、サブプロセスからの出力を取得します。一部のネイティブ・プラットフォームでは、標準の入力および出力ストリームに対して限られたバッファ・サイズしか提供されないため、入力ストリームを即時に書き込むことができないか、サブプロセスの出力ストリームを読み取らないと、サブプロセスがブロックされ、

関連する問題