Даже если вы исправите цикл, как указали другие, вы все равно заблокируете поток отправки событий. Цикл for
запускается в showProgress()
, который вызывается из прослушивателя событий. Обновления переносятся в очередь событий, но это не обрабатывается до тех пор, пока цикл не завершится.
Вместо этого используйте Swing Timer . Что-то вроде этого:
Timer timer = new Timer(25, new ActionListener() {
private int position;
@Override
public void actionPerformed(ActionEvent e) {
position++;
if (position < lastPosition) {
updateBar(position);
} else {
((Timer) e.getSource).stop();
}
}
});
timer.start();
, где lastPosition
будет состоянием, в котором вы хотите остановить индикатор выполнения.
Не связанный с этой ошибкой, но ошибка все же, вы должны не создавать компоненты качания вне потока отправки событий. Лучше всего сделать это с самого начала:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JBarEx jbx = new JBarEx();
}
});
}
Нет никаких преимуществ в производительности. Inversion of Control (IOC) и Injection Dependency Injection (DI) являются общими шаблонами в разработке программного обеспечения.
Если вы планируете внедрять модульное тестирование и тестирование UI и иметь читаемый код, я настоятельно рекомендую использовать IOS или DI.
Паттерны программного обеспечения занимают больше времени, но его ценность в долгосрочной перспективе / передача вашего проекта кому-то другому.
Вы можете узнать, как его реализовать здесь
Мое мнение / меня: {/ g5]
Я лично требую, чтобы программный паттерн, он заставляет меня писать код лучшего качества и упрощает работу над растущими проектами. Это также уменьшает задолженность по коду, которая может предотвратить появление странных ошибок. Его удручающее чтение плохо написанного кода