Swing worker не может обновить Jprogressbar во время импорта

Привет, я все еще учусь, когда дело доходит до реализации SwingWorker. В настоящее время я разрабатываю приложение для настольных ПК со свингом, которое загружает очень большой объем данных, что занимает около 15 секунд. я хотел использовать swingworker для управления задачей и обновления jPrgressBar, который не работает. ниже приведен код, который я использую

private class Update extends SwingWorker<Void, Void>{
    @Override
    protected Void doInBackground() throws Exception {
        importData();
            Thread.sleep(1000);
                return null;
    }
    protected void done(){

    }
}

этот частный класс имеет метод импорта, и я понимаю, что мне нужно реализовать свойство chagelistner для jprogressbar, чтобы отслеживать и обновлять мой индикатор выполнения, и код, который я использую, приведен ниже.

public void runProgress(){
Update task = new Update();
task.addPropertyChangeListener(new PropertyChangeListener(){
@Override
public void propertyChange(PropertyChangeEvent evt) {
    if ("progress".equals(evt.getPropertyName())){
        jProgressBar1.setIndeterminate(false);
        jProgressBar1.setValue((Integer) evt.getNewValue());
    }
}
});
    task.execute();
 }

Затем я вызываю метод runPregress под действием jButton. данные успешно импортируются, но с индикатором выполнения ничего не происходит. Пожалуйста, помогите мне решить мою проблему и постарайтесь дать как можно больше объяснений, так как я все еще изучаю, как работает свингворкер.


person Herb21    schedule 11.08.2015    source источник


Ответы (1)


Посмотрите на последний пример в документации: http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html

Вызовите метод "setProgress()" в вашем методе "doInBackGround()". Вы должны вызвать его несколько раз, как в самом последнем примере (PrimeNumbersTask).

person gouessej    schedule 11.08.2015