假设我正在运行一个进程,我想通过经典技术重定向其流:
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);
,以正确的顺序合并它们,但不再可能应用不同的颜色。 - 第二种方法是交替检查两个流以获取新输出。这里的问题是,当输出和错误几乎同时出现时,我无法确定应该首先显示哪一个。所以在这里我可以显示正确的颜色,但顺序不正确。
所以两者都没有按预期工作。我应该如何以正确的顺序以不同的颜色显示输出/错误?
你的问题是,使用你的技术,你可以保证阻止一个或另一个流,因为你在同一线程上收听它们。您应该在不同的线程上收听它们,并在数据通过它们时简单地显示它们。