首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是SwingUtilities.invokeLater?

什么是SwingUtilities.invokeLater?
EN

Stack Overflow用户
提问于 2012-08-22 16:11:20
回答 3查看 34.3K关注 0票数 15

可能重复: SwingUtilities.invokeLater是做什么的? SwingUtilities.invokeLater

我见过这段代码几百次了:

代码语言:javascript
复制
public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          createAndShowGUI();
        }
    });
}

现在我的问题是:invokeLater()是做什么的?如果我只是在主线程中创建并显示我的GUI,那么会发生什么样的坏事呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-22 16:15:11

如果您在跟踪指导方针时从EDT更新它,那么不会发生任何不好的事情。

那是..。

如果从事件调度线程--例如来自JButton的invokeLater‘s ActionListener --调用doRun.run(),那么doRun.run()仍将被推迟,直到所有挂起的事件都已处理完毕。

来源

如果不是这样,则需要invokeLater()

它调度将在EDT (事件调度线程)上执行的Runnable

票数 2
EN

Stack Overflow用户

发布于 2012-08-22 16:17:01

1. Event Dispatcher Thread是GUI线程。

2. --如果您谈论的是main() method...then ,它在Java 中生活的时间不长。main()方法在调度图形用户界面后退出,现在它的EDT处理图形用户界面.

3. invokeLater意味着当事件放置在事件调度程序队列中时,该调用将立即返回,而run()方法将异步运行.

票数 10
EN

Stack Overflow用户

发布于 2012-08-22 16:14:00

Swing不是线程安全的,对Swing对象的所有更改都必须在事件调度线程中执行。如果您尝试在外部运行代码,您将得到未指定的行为,这可能会在某个时候变得奇怪。

相反,Eclipse使用的SWT/JFace GUI框架在每个公共入口点上断言正确的线程。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12077245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档