2011-03-02 63 views
0

我在這裏搜索論壇,並發現一些命令行上的進度條的實施示例。現在我還有一個問題。我使用下面的實現示例:在命令行java進度條[線程]

public void print_progress(int percent){ 

StringBuilder bar = new StringBuilder(category + ": ["); 

    for(int i = 0; i < 50; i++){ 
     if(i < (percent/2)){ 
      bar.append("="); 
     }else if(i == (percent/2)){ 
      bar.append(">"); 
     }else{ 
      bar.append(" "); 
     } 
    } 

    bar.append("] " + percent + "%  "); 
    System.out.print("\r" + bar.toString()); 
} 

但我想在三個線程使用它,在同一時間運行的,要顯示在那樣的命令行上欄的每個線程的進度。現在,無論何時線程調用print_progress()方法,它都會覆蓋之前的線程。

有人能說出這是否可能,如果是的話,怎麼樣?

非常感謝。

回答

3

表示

在一個簡單的命令行,如果你的進度需要一整行,這是不可能的。您可以回到\r的行首,但不能返回上一行。

雖然可以在同一行顯示3個進度條。

很複雜有多個線程在一種有序的方式輸出到單個流

多線程問題。讓另一個線程處理輸出並從工作線程重新收集消息要容易得多。

這些消息可以採用線程安全隊列中的項目,信號,通過線程安全流的字節或任何您可以使用的內容。

+0

只會嘗試處理另一個線程的輸出。再次感謝 – nyyrikki 2011-03-02 20:12:49

0

要在終端/控制檯模擬器上實現3個進度條更新,您需要一個Java庫,可以在終端仿真器上執行屏幕操作......就像經典屏幕編輯器所做的一樣。

This SO question詢問這些庫的可用性。