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