2013-05-15 81 views
0

我有一個JProgressBar,並希望能夠看到它動態更新。進度條應該能夠明顯地從一個位置移動到另一個位置,而不僅僅是更改沒有酒吧明顯改變(想想常規加載酒吧)。明顯移動JProgressBar

public static void dropHPBar(int before, int after) { 

    Thread.currentThread.sleep(50); 

    while (before > after) { 

     try { 
      Thread.sleep(50); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     GameMain.gW.setHP(before); 

     b --; 
    } 

和GameMain.gW:

public void setHP(int x) { 

    hpBar.setValue(x); 
} 

爲什麼進度條不可見更新?

回答

3

EDT事件調度線程)中調用Thread.sleep可防止UI更新。您需要使用Swing Worker才能正確歸檔concurrency

從Oracle網站:

鞦韆由三種線程:

  • 初始線程,即執行初始應用程序代碼的線程。

  • 事件調度線程,其中執行所有事件處理代碼。與Swing框架交互的大多數代碼也必須在此線程上執行 。

  • 工作線程,也稱爲後臺線程,執行耗時的後臺任務。

事件調度線程的任務必須快速完成;如果他們不這樣做, 未處理的事件備份並且用戶界面變得無法響應。