SwingUtilities.invokeLater()

Jav*_*ser 2 java swing swingworker

如何在任何swing应用程序中感受SwingUtilities.invokeLater()的基本功能.请给出一些代码示例.

Jac*_*ack 5

每当您需要更新GUI内部的内容时,您应该通过AWT事件线程来完成.

这是因为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!"));
     }
   }
 }
Run Code Online (Sandbox Code Playgroud)