0

我正在尝试添加到我的程序进度条,当它执行时。实际上我想添加如下内容:

public class TestProgressBar extends javax.swing.JFrame {
   public  TestProgressBar Bar;
    public TestProgressBar() {
        initComponents();
        Bar=this;
    }
public void start(){
      //progress bar action
            SwingUtilities.invokeLater(new Runnable() {
              public void run() { 
                for(int i=0;i<100;i++){                
                          jProgressBar1.setValue(jProgressBar1.getValue()+10);  
                    try {
                    Thread.currentThread().sleep(100);
                      } catch (InterruptedException ex) {
                          Logger.getLogger(TestProgressBar.class.getName()).log(Level.SEVERE, null, ex);
                      }
            }
              }
              });
        //program running
   while(true);
}
    public static void main(String args[]) {
     TestProgressBar t=new TestProgressBar();
     t.setSize(320, 320);
     t.pack();
     t.setVisible(true);
     t.start();
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JProgressBar jProgressBar1;
    // End of variables declaration                   
}

但它不起作用
我找到了实现我想要做的代码的
代码 但是遇到了它很乱
所以问题是如何实现进度条,它的变化比程序正在工作?进度条值发生更改,但表单未显示这些更改

4

1 回答 1

1

您正在调用Thread.sleep(...)使您的应用程序进入睡眠状态的 Swing 事件线程。也可以在while (true)事件线程上调用,但我对此不是 100% 确定的。

解决方案:不要踩到 Swing 事件线程(或 Event Dispatch Thread 或 EDT),而是为此使用后台线程。请阅读Swing 中的并发以了解如何使用 SwingWorker 来帮助您为此创建后台线程。

于 2012-12-05T22:08:10.160 回答