2

Swing アプリケーションで SwingUtilities.invokeLater() の本質をどのように感じますか。コード例をいくつか挙げてください。

4

1 に答える 1

5

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!"));
     }
   }
 }
于 2010-07-02T01:00:30.253 に答える