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