Проблема с использованием таймера для обновления индикатора выполнения - PullRequest
1 голос
/ 10 декабря 2010

Я реализовал таймер для запуска индикатора выполнения следующим образом

 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, пока происходит загрузка

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

Это потому, что doUpload работает на Swing (UI) EDT (поток отправки событий) и блокирует его.Использование SwingWorker - это один из способов справиться с продолжительной задачей и при этом играть хорошо.Убедитесь, что все обновления / манипуляции пользовательского интерфейса только происходят из EDT - предыдущая ссылка (на след SwingWorker) содержит подробности.

2 голосов
/ 10 декабря 2010

DoUpload работает в потоке пользовательского интерфейса, что приводит к его блокировке.

выполняет doUpload в новом потоке

http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

0 голосов
/ 10 декабря 2010

все что вам нужно здесь:

http://en.wikipedia.org/wiki/SwingWorker

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...