我有一個EXE文件,addOne.exe
它連續地獲取控制檯來自用戶的整數輸入(NOT命令行參數)和整數+ 1輸出到控制檯。以下示例輸出所示:如何從Java程序連續輸入到EXE的控制檯?
1
2
6
7
29
30
...
我已經取得了EXE輸出工作,即,每當EXE輸出文本到控制檯,打印從Java程序文本。 我想:
- 使用
Scanner.nextInt()
,並輸入到EXE爲控制檯輸入 - 我需要在同一時間發送輸入一個Java程序,這意味着獲取用戶輸入只需在程序結束時關閉BufferedWriter流,並立即將流輸入到EXE中就行不通。
目前,我有以下代碼:
Process process = Runtime.getRuntime().exec("D:\\addOne.exe");
...
Scanner keyboard = new Scanner(System.in);
String input = "";
OutputStream stdin = process.getOutputStream();
while (!input.equals("exit")) {
try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin))) {
input = keyboard.nextLine();
writer.write(input);
} catch (IOException ex) {
Logger.getLogger(CmdLineTest.class.getName()).log(Level.SEVERE,null,ex);
}
}
但是,每當我運行此代碼,while循環的第一次迭代(我第一次輸入的東西)是能夠發送輸入到EXE,但是在第一次迭代之後,給出了錯誤java.io.IOException: Stream Closed
。
我怎麼能繼續得到while循環
謝謝內從Scanner.nextInt()
用戶輸入。
編輯:writer.flush()
似乎輸入不會對用戶輸入從Java程序的EXE。
編輯:見下文
移動作家建設循環之前。 – khelwood
@khelwood儘管我在while循環的第一次迭代後仍然得到相同的錯誤,因爲我在每次迭代時都關閉了OutputStream。 如果我在while循環的每次迭代中都不關閉OutputStream,那麼java程序不會將來自java程序的輸入輸出到EXE。 – Squidiemeister
每次迭代都不要關閉流。你可以沖洗它而不關閉。爲什麼你的* Out * putStream變量被稱爲'stdin'? – khelwood