我已经实现了一个计时器来运行进度条,如下所示
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);
}
};
}
正在发生的事情是,当我点击一个名为upload的按钮时,它在类jbutton_proceed_action中执行了操作。名为doUpload
的方法将数据上传到数据库,只需2分钟即可完成。我的问题是尽管我在调用doUpload方法之前启动了计时器,但是进度条没有开始运行,直到doUpload方法完成。有人可以帮助我解决这个问题。
我需要在uplod发生时运行prgressbar mean
答案 0 :(得分:2)
你的upload正在UI线程上运行,导致它被阻止。
在新线程中执行doUpload
http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
答案 1 :(得分:2)
这是因为doUpload
正在Swing(UI)EDT(事件派发线程)上运行并阻塞它。使用SwingWorker是处理长时间运行任务的一种方法,仍然可以很好地运行。确保所有UI更新/操作仅从EDT发生 - 前一个链接(到SwingWorker路径)包含详细信息。
答案 2 :(得分:0)