我正在尝试添加到我的程序进度条,当它执行时.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 但为了满足它的凌乱 那么问题是如何实现进度条,哪些变化比程序工作? 进度条值会更改,但表单不会显示这些更改
答案 0 :(得分:1)
你正在Swing事件线程上调用Thread.sleep(...)
,这会让你的应用程序进入休眠状态。 while (true)
也可以在事件线程上调用,但我对此并不是100%肯定。
解决方案:不要踩到Swing事件线程(或Event Dispatch Thread或EDT),而是使用后台线程。请阅读Concurrency in Swing,了解如何使用SwingWorker帮助您为此创建后台线程。