我正在尝试与Java中的另一个进程进行交互。就像这样......
Runtime rt;
Process pr=rt.exec("cmd");
然后我使用...
向进程发送一些命令BufferedReader processOutput = new BufferedReader(new InputStreamReader(pr.getInputStream()));
BufferedWriter processInput = new BufferedWriter(new OutputStreamWriter(pr.getOutputStream()));
processInput.write("gdb");
processInput.flush();
我现在不关心输出..所以我试着用它来忽略它。
while(processOutput.readLine() != null);
但这个循环永远挂起。我知道这是因为进程仍在运行并且不发送空值。我现在不想终止它。我必须根据用户输入发送命令,然后获取输出..
怎么做?换句话说,我想在执行某些命令后刷新Process输出流或忽略它,并在我想要的时候读取它。
答案 0 :(得分:2)
使用单独的线程读取输出。这样,只要有输出就会被读取,但不会阻止你。
例如,创建这样一个类:
public class ReaderThread extends Thread {
private BufferedReader reader = null;
public ReaderThread(BufferedReader reader) {
this.reader = reader;
}
@Override
public void run() {
String line = null;
try {
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
catch(IOException exception) {
System.out.println("!!Error: " + exception.getMessage());
}
}
}
在您的主要课程中,而不是while(processOutput.readLine() != null);
,请致电:
ReaderThread reader = new ReaderThread(processOutput);
reader.start();