明显移动JProgressBar

时间:2013-05-15 17:33:14

标签: java swing event-dispatch-thread jprogressbar thread-sleep

我有一个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);
}

为什么进度条没有明显更新?

1 个答案:

答案 0 :(得分:3)

EDT事件调度线程)中调用Thread.sleep会阻止UI更新。您需要使用Swing Worker才能归档正确的concurrency

来自Oracle网站:

  

Swing由三种线程组成:

     
      
  • 初始线程,执行初始应用程序代码的线程。

  •   
  • 事件调度线程,执行所有事件处理代码。大多数与Swing框架交互的代码也必须   在这个帖子上执行。

  •   
  • 工作线程,也称为后台线程,执行耗时的后台任务。

  •   
     

事件派发线程上的任务必须快速完成;如果他们不这样做,   未处理的事件备份,用户界面无响应。