【发布时间】:2017-02-01 17:48:03
【问题描述】:
我正在尝试通过 CMD 打开一个应用程序 (RCMIClient.exe)。我能够打开 CMD,但无法读取或向 CMD 写入命令。下面是代码,没有错误,它只是打开CMD,什么都不做,但是当我手动关闭CMD时,我得到了以下错误。
null
Exception in thread "main"
java.io.IOException: Stream closed
at java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:433)
at java.io.OutputStream.write(OutputStream.java:116)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at java.io.BufferedWriter.flush(BufferedWriter.java:254)
at test.test.main(test.java:36)
代码:
public static void main(String[] args) throws IOException, InterruptedException {
File f = new File("C:\\WDGSIMTools\\Anite\\RCMI\\Samples\\Release");
ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c","start").directory(f);
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StringBuilder output = new StringBuilder();
String line;
String errline;
errline = error.readLine();
System.out.println(errline);
while((line=reader.readLine())!=null) {
output.append(line);
}
//To test whether its reading CMD contents
System.out.println(output);
//send commands to CMD
writer.write("RCMIClient.exe"+"\n");
writer.flush();
writer.write("1"+"\n");
writer.close();
reader.close();
}
【问题讨论】: