1

プロセスを実行していて、そのストリームを従来の手法でリダイレクトしたいとします。

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);それらを正しい順序でマージするを使用することですが、異なる色を適用することはできなくなりました。
  • 2 番目のアプローチは、両方のストリームを交互にチェックして新しい出力を確認することです。ここでの問題は、出力とエラーがほぼ同時に表示された場合に、どちらを先に表示するかを判断できないことです。したがって、ここでは正しい色を表示できますが、正しい順序では表示できません。

したがって、どちらも期待どおりに機能しません。出力/エラーを正しい順序で異なる色で表示するにはどうすればよいですか?

4

1 に答える 1

2

あなたの問題は、同じスレッドで両方のストリームをリッスンしているため、テクニックを使用すると、どちらか一方のストリームをブロックすることが保証されていることです。それらを異なるスレッドでリッスンし、それらを介してデータが入ってきたときに単に表示する必要があります。

于 2012-09-26T00:07:22.873 に答える