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と、UI の更新が妨げられます。適切な並行性をアーカイブするには、 Swing Workerを使用する必要があります。EDT

オラクルのウェブサイトから:

Swing は、次の 3 種類のスレッドで構成されます。

  • 初期スレッド、初期アプリケーション コードを実行するスレッド。

  • すべてのイベント処理コードが実行されるイベント ディスパッチ スレッド。Swing フレームワークとやり取りするほとんどのコードも、このスレッドで実行する必要があります。

  • バックグラウンド スレッドとも呼ばれるワーカー スレッド。時間のかかるバックグラウンド タスクが実行されます。

イベント ディスパッチ スレッドのタスクはすぐに終了する必要があります。そうしないと、未処理のイベントがバックアップされ、ユーザー インターフェイスが応答しなくなります。

于 2013-05-15T17:37:42.513 に答える