0
我想從一個Java應用程序運行一個.exe文件,並希望能夠使用它(現在)像一個終端,在那裏我可以寫入.exe然後回讀它,然後再次寫入。如果BufferedWriter仍然打開,爲什麼BufferedReader會失敗?
我的問題是隻有在讀取器試圖從輸入流讀取之前關閉寫入器時,該代碼才起作用。
String line = "", prev = "";
Scanner scan = new Scanner(System.in);
ProcessBuilder b = new ProcessBuilder("myexe");
b.redirectErrorStream(true);
Process p = b.start();
OutputStream stdin = p.getOutputStream();
InputStream stdout = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
System.out.println ("->");
while (scan.hasNext()) {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
String input = scan.nextLine();
if (input.trim().equals("exit")) {
writer.write("C");
} else {
writer.write(input);
}
writer.flush();
//writer.close();
while ((line = reader.readLine()) != null) {
System.out.println ("[Stdout] " + line);
if (line.equals(prev)){
break;
}
prev = line;
}
reader.close();
}
所以我的問題是,我在做ProcessBuilder的錯誤嗎?我已閱讀有關不正確讀取輸出可能導致系統掛起。但是這並不能解釋爲什麼當作家仍然開放時它會掛起?
子進程可能正在等待行尾字符。 – 2015-02-10 23:09:22
我的確想到了這一點,並添加並測試了「\ n」「%n」「\ r \ n」到發送到寫入緩衝區的字符串,仍然是同樣的事情......是否有另一種方法呢? – 2015-02-11 09:22:08