Значение индикатора выполнения действительно обновлено. Но это не просто на экране. Часто мы используем индикаторы выполнения в циклах. Но пока вы находитесь в цикле, который вы, вероятно, вызываете, нажимая кнопку , он не закрашивается. Зачем? Потому что вы вызвали его, нажав кнопку. Когда вы нажимаете кнопку, весь код, который вы создали для этой кнопки, выполняется AWTEventThread
. Это та же самая нить, которая отслеживает все компоненты Swing и проверяет, нужно ли их перекрашивать. Это нить, которая оживляет ваш JFrame. Когда вы наводите кнопку и цвет немного меняется, это делается с помощью AWTEventThread
.
Итак, пока вы работаете в цикле, AWTEventThread больше не может обновлять экран.
Это означает, что есть два решения:
(Рекомендовать) Вам следует создать отдельный поток, который выполняет цикл. Это означает, что AWTEventThread может обновить экран при необходимости (когда вы звоните bar.setValue(...);
)
public void yourButtonClickMethod()
{
Runnable runner = new Runnable()
{
public void run() {
//Your original code with the loop here.
}
};
Thread t = new Thread(runner, "Code Executer");
t.start();
}
Вручную перекрасить индикатор выполнения. Я делал это всегда с bar.repaint();
, но мне интересно, будет ли это работать. Я думал, что это был тот метод. Если это не сработает, попробуйте: bar.update(bar.getGraphics());
.