Java进程处理: keep correct order with output+error stream?

标签 java process stream

假设我正在运行一个进程,并且我想通过经典技术重定向其流:

ProcessBuilder pb = new ProcessBuilder("C:/folder/script.bat");
Process p = pb.start();
InputStreamReader out = p.getInputStream();
InputStreamReader err = p.getErrorStream();
OutputStreamWriter in = p.getOutputStream();    

现在我的问题:我想以黑色显示所有输出,以红色显示所有错误,并且我想保持正确的顺序。

  • 我想到的第一个方法是使用 pb.redirectErrorStream(true); ,以正确的顺序合并它们,但不再可能应用不同的颜色。
  • 第二种方法是交替检查两个流是否有新输出。这里的问题是,当输出和错误几乎同时出现时,我无法确定应该先显示哪一个。所以在这里我可以显示正确的颜色,但顺序不正确。

所以两者都没有按预期工作。我应该如何以正确的顺序以不同的颜色显示输出/错误?

最佳答案

您的问题是,使用您的技术,您一定会阻塞一个或另一个流,因为您正在同一线程上监听这两个流。您应该在不同的线程上监听它们,并在数据通过它们传入时简单地显示它们。

关于Java进程处理: keep correct order with output+error stream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592817/

相关文章:

java - 发生在 Java 内存模型之前和程序顺序

c++ - Linux进程间传输socket

c# - XNA 关闭游戏

javascript - 定义网络流源/接收器逻辑的最佳方法是什么?

java - JPA映射导致创建表错误

java - 如何通过点击邮件中的链接获取 Gmail ID

batch-file - VBScript 检查用户打开的进程

c++ - 如何清除String流中的内容?

java - Java 8 更高版本中 `url.openStream` 行为的变化

java - Spring Hibernate 集成错误