2015-02-09 78 views
0

我正在使用JAVA爲控制檯程序編寫GUI。它啓動並運行良好,但是當我向stdin發送「\ n」或「\ r \ n」時,它不作出反應,因爲它只是在終端中啓動此程序並按下「Enter」鍵。控制檯程序在發送 n到stdin時沒有反應

此代碼用來啓動過程:

String cmd="example.exe"; 
process = new ProcessBuilder(cmd).start(); 

而這個代碼是用來發送「\ n」

OutputStream outputStream = process.getOutputStream(); 
outputStream.write("\n".getBytes()); 
outputStream.flush(); 

在另一個線程我試圖從這個過程中

閱讀
while ((line = is.readLine()) != null && !Thread.currentThread().isInterrupted()) { 
    ... 
} 

我該如何正確發送「\ n」以接收來自過程的信息?

更新: 我需要發送一個新的線符號。或「按Enter」。 我讀出和錯誤,都是空的。 應用程序始終將其狀態作爲對按下回車鍵的反應。所以沒有反應是一個錯誤。

+0

使用任何可以解釋它的字符流。 – 2015-02-09 11:49:20

+0

歡迎使用堆棧溢出。爲了得到很好的幫助,你可能需要指定你期望發生的事情 - 爲什麼你會期望它的行爲與它的行爲有什麼不同?你想要發生什麼?你想讓「接收」線程發送字節碼「\ n」嗎? – 2015-02-09 11:57:37

回答

0

大概你期待寫入outputStream的換行符觸發你可以使用is閱讀的東西。

這裏有幾個可能的原因:

  1. 你可以從你的錯流中讀取。外部程序可能會寫入「標準錯誤」,而您正在讀取「標準輸出」,反之亦然。

  2. 外部應用程序可能無法刷新。例如,如果輸出指向交互式輸出流(例如「控制檯」),則它(或其使用的I/O庫)可能僅在每個換行符後刷新輸出。將程序輸出連接到JVM的管道可能不會顯示爲交互式。

這些僅僅是猜測...


如果我試圖調試這一點,我會嘗試確定問題是否是換行不得到example.exe,該響應不會被example.exe寫入/刷新,或者Java端無法讀取它......出於某種原因。

相關問題