Всегда подчиняйся правилу свинга
После реализации компонента Swing весь код, который может влиять или зависеть от состояния этого компонента, должен выполняться в потоке диспетчеризации событий.
Что вы можете сделать, это создать наблюдателя, который будет обновлять ваш индикатор выполнения - такой как
- в этом случае вы хотите показать ход загрузки данных по нажатию кнопки.
Класс DemoHelper
реализует Observable
и отправляет обновления всем наблюдателям при загрузке определенного процента данных.
Индикатор выполнения обновляется с помощью public void update(Observable o, Object arg) {
class PopulateAction implements ActionListener, Observer {
JTable tableToRefresh;
JProgressBar progressBar;
JButton sourceButton;
DemoHelper helper;
public PopulateAction(JTable tableToRefresh, JProgressBar progressBarToUpdate) {
this.tableToRefresh = tableToRefresh;
this.progressBar = progressBarToUpdate;
}
public void actionPerformed(ActionEvent e) {
helper = DemoHelper.getDemoHelper();
helper.addObserver(this);
sourceButton = ((JButton) e.getSource());
sourceButton.setEnabled(false);
helper.insertData();
}
public void update(Observable o, Object arg) {
progressBar.setValue(helper.getPercentage());
}
}
Бесстыдный плагин: это источник из моего демонстрационного проекта
Не стесняйтесь просматривать для более подробной информации.