2

我如何看待 SwingUtilities.invokeLater() 在任何 Swing 应用程序中的重要性。请给出一些代码示例。

4

1 回答 1

5

每当您需要更新 GUI 中的某些内容时,您都应该通过AWT 事件线程来完成。

这是因为 AWT(和顶部的 Swing)有自己的线程来管理 GUI 的所有内容。没有它,当您的程序正在执行其他操作时,图形界面无法以异步方式处理事件和类似的事情。

因此,例如,如果您在 a 中声明了一个很长的任务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 回答