1

ファイルから読み取り、いくつかの操作を行うメソッドで jProgressBar を更新する必要があります。この方法で進行状況バーを更新しようとしました:

 public void progressUpdate(int percent) {
     System.out.println("Update = "+percent);
     synchronized (jMainProgressBar) {
         jMainProgressBar.setValue(percent);
     }
     SwingUtilities.invokeLater(
         new Runnable() {

             public void run() {
             jMainProgressBar.updateUI();
             jMainProgressBar.repaint();
             }
         });
 }

これがどのように機能するかは、メソッドが完了したときだけです。しかし、この方法で継続的に更新しても何も起こりません。

たぶん、この方法を改善する方法を知っている人はいますか?

また、Worker スレッドなどの提案が増えるとよいでしょう。

4

4 に答える 4

3

あなたはおそらくやりたい

public void progressUpdate(final int percent) {
     SwingUtilities.invokeLater(new Runnable() {
         public void run() {
             jMainProgressBar.setValue(percent);
         }
     });
}
于 2012-05-14T17:08:06.737 に答える
2

スレッドを使用しないでください。タイマーを使用します。以下を参照してください。

于 2012-05-14T17:18:47.907 に答える
1

あなたが提供したコメントに基づいて (ただし、質問からではありません!)、イベント ディスパッチ スレッド (EDT) で重い作業を実行しています。これにより、そのスレッドがブロックされ、スケジュールされた再描画の実行が回避されます。JProgressBarそのため、EDT が再描画を実行できるようになる瞬間であるため、作業が終了した後にのみ更新が表示されます。

解決策は、他の人が投稿したリンクで既に提供されていますが、基本的には次のようになります。

  • ワーカー スレッドで作業を実行する
  • JProgressBarEDTの進行状況を更新する

これを実現するための最も一般的な 2 つの方法は、ワーカー スレッドを使用するSwingWorkerSwingUtilities.invokeLater、ワーカー スレッドから使​​用することです。

すべての関連リンクは、Yohan Weerasinghe の回答にあります。

于 2012-05-14T18:18:19.460 に答える
0

これをチェックしてください

 Timer barTimer;
 barTimer=new Timer(100,new ActionListener()
    {
     public void actionPerformed(ActionEvent e)
       {
        barvalue++;
        if(barvalue>jProgressBar1.getMaximum())
            {
                /* 
                 * To stop progress bar when it reaches 100 just write barTime.stop() 
                 */
               barTimer.stop();
               barvalue=0;

     }
    else
    {
        int a=(int)jProgressBar1.getPercentComplete();
        jProgressBar1.setStringPainted(true);
        jProgressBar1.setValue(barvalue);

      }
   }
    });
    barTimer.start();

このリンクでコードを確認してください http://java23s.blogspot.in/2015/10/how-to-implement-progress-bar-in-java.html

于 2015-10-30T19:36:12.253 に答える