@cattom72
Врач анестезиолог-реаниматолог. Караганда.

Почему при нажатии кнопки не отображается 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);
}
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 1
@zelan
Кратко обо мне не получится.
Дело в том, что ваши расчеты ("тяжелая имитация") производятся в потоке, который отвечает за работу и отрисовки графики (компонентов). Пока работает ваш цикл имитации - блочится и не отрисовывается ВЕСЬ интерфейс программы. Тяжелые расчеты должны производиться в отдельных потоках.

Почитайте про SwingWorker, и в целом про синхронизацию интерфейса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы