2011-12-28 12 views
0

進捗バーの変更はSetValue(int)を使用したいが動作しませんが、フォームのUIスレッドを呼び出すのではなく、 "setValue(int)"を呼び出すために新しいスレッドを作成しようとしますが、まだ動作しません。プログレスバーの更新の問題、0から100への直接変更、Javaでの1,2,3 ......の変更なし

my code:

public class UpdateProgressBar extends Thread{ 
public UpdateProgressBar(javax.swing.JProgressBar progressBar){ 
    this.progressBar = progressBar; 
} 
public void update(){ 
    for(int i = 1; i <= 100; i++){ 
     progressBar.setValue(i); 
     try { 
      sleep(10); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(UpdateProgressBar.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    }   
} 
private javax.swing.JProgressBar progressBar; 
} 

、プログレスバーは、UIスレッドで定義されている、UIスレッドで、私UpdateProgressBar upb = new UpdateProgressBar(progressBar);、それは更新方法upb.update();だ呼び出すには、私はいくつかのミスをしたのですか?

答えて

1

UpdateProgressBarThreadに拡張すると宣言しましたが、実際に別のスレッドとして実行していません。新しいスレッドを実際に実行させるには、start()に電話する必要があります。イベントディスパッチスレッドからupb.update()を呼び出すと、そのメソッドイベントディスパッチスレッド上で実行しています。

あなたのクライアントコードでこれをしたい:

UpdateProgressBar upb = new UpdateProgressBar(progressBar); 
upb.start(); 

及びこれにあなたのUpdateProgressBarクラスを変更:

public class UpdateProgressBar extends Thread{ 
    public UpdateProgressBar(javax.swing.JProgressBar progressBar){ 
     this.progressBar = progressBar; 
    } 

    @Override 
    public void run(){ 
     for(int i = 1; i <= 100; i++) { 
      final int j = i; 
      SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        progressBar.setValue(j); 
       } 
      }); 
      try { 
       sleep(10); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(UpdateProgressBar.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 
    private javax.swing.JProgressBar progressBar; 
} 

Swingコンポーネントはスレッドセーフではありませんので、あなたがSwingUtilities.invokeLaterを持っている必要があります。 final int j = iという厄介なものも必要です。なぜなら、Javaの優れたクロージャ処理ではないからです。 runメソッドにコードを入力すると、Thread.start()を呼び出したときにコードが実行されます。

+0

ありがとうございました!問題は解決しました。 – cooba

0

おそらく、設定されている最大値は1ですか?値の設定を開始して何が起こるかを見る前に、プログレスバーの最大値を設定します。

関連する問題