使用计时器更新进度条的问题

时间:2010-12-10 08:52:14

标签: java swing

我已经实现了一个计时器来运行进度条,如下所示

 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

3 个答案:

答案 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)