【问题标题】:Visibly Moving JProgressBar明显移动 JProgressBar
【发布时间】:2013-05-15 17:33:14
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    来自 Oracle 网站:

    Swing 由三种线程组成:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2015-05-29
      相关资源
      最近更新 更多