程序运行时的ProgressBar

时间:2012-12-05 21:45:14

标签: java swing event-dispatch-thread jprogressbar

我正在尝试添加到我的程序进度条,当它执行时.Actualy我想添加这样的东西:

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                   
}

但它不起作用 我找到了实现我想做的代码 Code 但为了满足它的凌乱 那么问题是如何实现进度条,哪些变化比程序工作? 进度条值会更改,但表单不会显示这些更改

1 个答案:

答案 0 :(得分:1)

你正在Swing事件线程上调用Thread.sleep(...),这会让你的应用程序进入休眠状态。 while (true)也可以在事件线程上调用,但我对此并不是100%肯定。

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