Почему при нажатии кнопки не отображается ProgressBar?
Добрый день! Я только учусь писать на Java, поэтому не обесудьте, если вопрос не отличается особой глубиной и замысловатостью)
Может кто-нибудь подсказать, почему в нижеуказанном коде нормально не работает ProgressBar? По идее, при нажатии на кнопку btnCalc должна идти имитация серьезных расчетов зарплаты))), но ProgressBar появляется только одновременно с идущим после цикла отображением информации в текстовом поле ( txtAr.setText(txtOutput), и сразу со 100%, то есть нет динамики изменения! Отдельно фрагмент кода с прогрессбаром работает. Не могу понять, в чем дело
public void actionPerformed(ActionEvent event){
if (event.getSource() == btnCalc){
txtAr.setText("");
summaDayHours = CalcOfHours.howManyDaysHours(sutki,nochi, dni,d89);
summaNightHours = CalcOfHours.howManyNightsHours(sutki,nochi);
txtOutput = "................................................;
prBar.setVisible(true); // Это прогрессбар
for (int i = 0; i <= 100; i++){
prBar.setValue(i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
txtAr.setText(txtOutput);
}
Дело в том, что ваши расчеты ("тяжелая имитация") производятся в потоке, который отвечает за работу и отрисовки графики (компонентов). Пока работает ваш цикл имитации - блочится и не отрисовывается ВЕСЬ интерфейс программы. Тяжелые расчеты должны производиться в отдельных потоках.
Почитайте про SwingWorker, и в целом про синхронизацию интерфейса.