似乎使用BufferedReader
来阅读流程' InputStream
将以某种方式导致块I / O行为。
效果就像程序没有从过程中获得即时输入。
我知道当时有更多行可以阅读,但是BufferedReader
只是等待一段时间,然后我终于可以更新线路了。
以下是代码:
While((str=bufferedReader.readLine()!=null) {
System.out.println(str);
}
是否有某种方法可以在不阻塞的情况下继续读取进程 在while()条件下?因为该过程不会返回null或任何其他....
答案 0 :(得分:0)
您可以在单独的线程中读取子进程输出。像这样的东西
static BlockingQueue<String> queue = new LinkedBlockingDeque<>();
public static void main(String[] args) throws Exception {
Process p = Runtime.getRuntime().exec("cmd /c dir");
final BufferedReader rdr = new BufferedReader(new InputStreamReader(p.getInputStream()));
Thread t = new Thread() {
public void run() {
try {
for (String line; (line = rdr.readLine()) != null;) {
queue.put(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
for (;;) {
String line = queue.poll();
if (line != null) {
System.out.println(line);
} else if (!t.isAlive()) {
break;
}
}
}
答案 1 :(得分:0)
您可以使用NuProcess库对外部进程进行非阻塞I / O操作。将其视为Java中ProcessBuilder
和Process
的替代。