SwingUtilities.invokeLater () - PullRequest
       3

SwingUtilities.invokeLater ()

2 голосов
/ 02 июля 2010

Как я чувствую необходимость SwingUtilities.invokeLater () в любом приложении Swing. Пожалуйста, приведите пример кода.

1 Ответ

5 голосов
/ 02 июля 2010

Всякий раз, когда вам нужно обновить что-то внутри вашего 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!"));
     }
   }
 }
...