SwingUtilities.invokeLater是做什么的?

有什么作用?它只是延迟在其方法中执行代码块吗?在函数中调用操作或仅在我们要执行的线程结束时调用它有什么区别?任何人都可以帮助我了解该功能的真正功能吗?SwingUtilities.invokeLaterruninvokeLaterinvokeLater


答案 1

正如其他答案所说,它会在AWT事件调度线程上执行您的。但是你为什么要这样做呢?由于 Swing 数据结构不是线程安全的,因此为了向程序员提供一种易于实现的方法来防止对它们的并发访问,Swing 设计人员制定了规则,即访问它们的所有代码必须在同一线程上运行。对于事件处理和显示维护代码,这会自动发生,但是如果您已经启动了长时间运行的操作 - 当然是在新线程上 - 您如何指示其进度或完成?您必须修改 Swing 控件,并且必须从事件调度线程中执行此操作。因此。RunnableinvokeLater


答案 2

它将在 AWT 线程上运行该段代码。这允许您从其他线程修改 GUI。

来自文档

使 doRun.run() 在 AWT 事件调度线程上异步执行。这将在处理完所有挂起的 AWT 事件后发生。当应用程序线程需要更新 GUI 时,应使用此方法。