我试图让我的程序在执行某些操作时在方法中不断更新进度条值。然而,这直到最后才会发生,并且 UI 冻结。
在查看了与我的问题类似的问题后,我尝试实施公认的解决方案(使用线程),但是我无法让它正常工作。就像他们在哪里不在那里一样。
我的程序包含几个类,Main
一个是由netbeans 在JFrame Design模式下自动创建的,所以有些东西,例如static void main
,public Main
并不确定它的某些内容。下面我将把这些方法的片段连同我的线程实现放在一起。
public class Main extends javax.swing.JFrame implements ActionListener, Runnable{
// I added implements ActLis, Runn.....
...
static Main _this; // I included this variable
...
public static void main(String args[]) {
Main m = new Main(); // Added by me
new Thread(m).start(); // Added by me
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
...
public Main() {
initComponents();
_this = this; // Added by me
}
...
// I also included these 2 methods in the class
public void actionPerformed(ActionEvent e) {
synchronized(this){
notifyAll();
}
}
public void run() {
try{synchronized(this){wait();}}
catch (InterruptedException e){}
progressBar.setValue(50);
}
...
private void buttonPressed(java.awt.event.MouseEvent evt) {
for(int i=0; i<=100; i++) {
for(int j=0; j<=5; j++) {
// does some work
}
run();
}
}
我评论的所有内容I added...
都是我根据我在网上看到的教程和答案提出的,但似乎没有任何效果,感觉就像我尝试了近百万种不同的组合......
提前感谢您的帮助。