我已经实现了一个计时器来运行进度条,如下所示
public class UpdateOnline extends JInternalFrame {
//UI related code goes here
class jbutton_proceed_action implements ActionListener {
public void actionPerformed(ActionEvent e) {
int result = -1;
Timer time = new Timer(50, updateBar);
time.start();
result = doUpload("bulk");
}
}
ActionListener updateBar = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
int val = jProgressBar1.getValue();
jProgressBar1.setValue(++val);
}
};
}
发生的是,当我单击名为上载的按钮时,它在类jbutton_proceed_action中执行了操作。称为
doUpload
的方法将数据上传到数据库仅需2分钟即可完成。我的问题是,尽管我已经在调用doUpload方法进度条之前启动了计时器,但直到doUpload方法完成后才开始运行。请问有人可以帮助我解决这个问题吗?我需要在出现隆起时运行prgressbar的意思
最佳答案
这是因为doUpload
在Swing(UI)EDT(事件分派线程)上运行并被阻止。使用SwingWorker是处理长时间运行的任务并且仍然运行良好的一种方法。确保所有UI更新/操作仅从EDT发生-上一个链接(到SwingWorker路径)包含详细信息。