猿问
下载APP

SwingUtilities.invokeLater做什么?

SwingUtilities.invokeLater做什么?怎么SwingUtilities.invokeLater办?它只是推迟在其run方法中执行一段代码吗?在invokeLater函数中调用一个动作或者在我们想要执行的线程的末尾调用它有什么区别?任何人都可以帮我完成这项invokeLater功能的真正功能吗?

哈士奇WWW
浏览 39回答 3
3回答

富国沪深

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

慕虎7371278

它将在AWT线程上运行该段代码。这允许您从其他线程修改GUI。来自Docs:导致doRun.run()在AWT事件派发线程上异步执行。这将在处理完所有挂起的AWT事件后发生。当应用程序线程需要更新GUI时,应使用此方法。

明月笑刀无情

如前所述,当您没有在EventQueue上运行时,InvokeLater允许您安全地调用swing类中的方法。但是,您可以通过仅从 EventQueue 访问其他字段和类来简化代码和生活。他们可以在没有多线程麻烦的情况下使用swing和彼此。如果您已启动另一个线程,请使用InvokeLater尽快返回EventQueue,并最小化必须同步或以其他方式保护的字段数。如果您需要充分利用多个内核,则必须减少对EventQueue的使用,并且必须付出很大的代价。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答