如果在EDT外部运行的代码调用GUI类中定义的方法,则该代码不会在EDT上运行,而是在调用线程中运行。
如果在EDT中运行的代码调用了非GUI类中定义的代码,则该代码将在EDT上运行。
规则是,如果您不创建其他线程,则正在调用的方法将在运行调用代码的线程上运行–线程与定义方法的类不对应。
在EDT上运行的方法是 ,它们是由Swing而不是您调用的。(不过,如果您是从EDT打电话给他们,它们可能仍然是。)
同样,Runnable.run()
传递给SwingUtilities.invokeLater()
和的方法内的任何代码invokeAndWait()
也可以在EDT上运行。
在Thread
您创建的代码中调用的任何代码(无论是直接使用线程,还是直接使用ExecutorService
,或SwingWorker.doInBackground()
)都不 在EDT上。您程序的main()
方法 也不 在EDT上。