2012-09-26 53 views
1

假設我運行一個過程,我想通過經典的技術改它流:Java進程處理:通過輸出+錯誤流保持正確的順序?

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

你的問題是,你的技術,你保證阻止一個或其他流,因爲你在同一個線程上聽他們兩個。您應該在不同的線程上聽取它們,並在數據通過它們進行顯示時進行簡單顯示。

+0

聰明的主意,謝謝!然而,我不清楚如何確保兩個線程都是同步的,因爲我在流中看不到任何功能。我們如何確保以正確的順序聽到近乎同時出現的輸出+錯誤? – user1111929