Возможно, ваш поток внес изменения, но экран не обновляется до тех пор, пока не появится поток рассылки событий Swing и не обновит экран. Рекомендуется и безопаснее вызывать методы обновления пользовательского интерфейса, используя поток диспетчеризации событий Swing. Вы можете сделать это, поместив код обновления графического интерфейса в этот метод:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// call gui update here
}
});
Это все еще не решает вашу проблему (обновление происходит после завершения выполнения потока). Это только для того, чтобы прямо указать, что вы имеете дело с двумя потоками здесь. Ваш цикл for в отдельном потоке, скорее всего, закончится первым, потому что поток рисования обычно медленнее. Однако, зная это, вы сможете спланировать, какой код будет передаваться потоку событий Swing. Если вы действительно хотите, чтобы цикл for обновлялся в этот момент времени, вы можете поместить весь цикл for в invokeLater()
.