Самый надежный способ заставить Swing обновить дисплей - это использовать SwingUtilities.invokeLater
.В вашем случае это выглядело бы примерно так:
SwingUtilities.invokeLater(new Runnable {
public void run() {
somecomponent.repaint();
}
});
Я понимаю, что 'invokelater' не совсем звучит так, как будто он делает что-то немедленное, но на практике события, публикуемые таким образом, обычно выполняются довольно быстро по сравнению с простонапример, somecomponent.repaint()
.Если вам абсолютно необходимо подождать, пока ваш управляющий код будет ждать обновления графического интерфейса, то есть также invokeAndWait
, но мой опыт показывает, что это редко необходимо.
См. Также: документ об отправке события на качелях.