0

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

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

4

1 回答 1

3

调用Thread.sleep事件调度线程EDT)会阻止 UI 更新。您需要使用Swing Worker来归档正确的并发性

从甲骨文网站:

Swing 由三种线程组成:

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

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

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

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

于 2013-05-15T17:37:42.513 回答