2011-06-21 63 views
0

我有一個等待鍵盤退出的命令行應用程序。這個過程從Java發起,但是當我發送按鍵(a)時,沒有任何反應。它看起來像應用程序從來沒有從標準輸入接收任何東西。這裏有一個代碼示例:命令行進程沒有從標準輸入接收任何東西

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進程或shell腳本。創建的子流程沒有自己的終端或控制檯。它的所有標準io(即stdin,stdout,stderr)操作將通過三個流(getOutputStream(),getInputStream(),getErrorStream())重定向到父進程。父進程使用這些流將輸入提供給子進程並從子進程獲取輸出。由於某些本地平臺僅爲標準輸入和輸出流提供有限的緩衝區大小,因此無法及時寫入輸入流或讀取子流程的輸出流可能會導致子流程阻塞甚至死鎖。

相關問題