Всякий раз, когда вам нужно обновить что-то внутри вашего GUI, вы должны сделать это через AWT Event Thread .
Это потому, что AWT (и Swing сверху) имеет свой собственный поток, который управляет всем из GUI. Без этого графический интерфейс не мог бы обрабатывать события и подобные вещи асинхронно, пока ваша программа делает что-то еще.
Например, если у вас есть длинная задача, объявленная в Thread
:
public void MyThread extends Thread
{
class GUIUpdate implements Runnable
{
GUIUpdate(String msg)
{
...
}
public void run()
{
guiElement.appendText(msg);
}
}
public void run()
{
while (finished)
{
//do long calculations
//send partial output to gui
SwingUtilities.invokeLater(new GUIUpdate("something has changed!"));
}
}
}