我已经在我的Java代码中启动了一个进程,这个过程需要很长时间才能运行,并且可能会不时生成一些输出。生成时我需要对每个输出做出反应,这样做的最佳方法是什么?
答案 0 :(得分:1)
Process.getInputStream
和Process.getErrorStream
是您正在寻找的。从这两者中读取并做出相应的反应。请注意,您可能希望从不同的线程中读取它们,以避免任何流的单个缓冲区填满。
或者,如果您不需要单独使用这两个,请将redirectErrorStream
中的ProcessBuilder
保留为false,以便合并错误和输出流。
答案 1 :(得分:1)
您应该启动一个从Process.getInputStream()
和getErrorStream()
(或者使用ProcessBuilder.redirectErrorStream(true)
)读取的线程,并在流中显示某些内容时处理它。如何处理它的方法有很多 - 正确的方法取决于数据的使用方式。请详细说明。
以下是一个真实示例:SbtRunner使用ProcessRunner向命令行应用程序发送命令并等待命令完成执行(应用程序将在命令时打印“>”完成执行)。有一些间接发生,以便更容易从进程的输出中读取(输出被写入MulticastPipe,然后由OutputReader读取。