首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用invokeLater很重要?

为什么使用invokeLater很重要?
EN

Stack Overflow用户
提问于 2013-10-03 19:02:33
回答 4查看 364关注 0票数 3

我最近发现了一个示例代码:

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

createAndShowGUI()方法打开用户界面窗口。然后,我试图按以下方式修改代码:

代码语言:javascript
复制
public static void main(String[] args) {
    createAndShowGUI();
}

这两个版本都运行得同样好。有什么关系?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-03 19:04:35

99%的情况下,这两种代码都能工作。

但是,Swing的设计使得对Swing组件的所有更新都应该在事件分发线程(,EDT)上完成。有关更多信息,请阅读关于并发性的Swing教程。

问题是,1%的情况下,它可能不起作用。您不想浪费时间来调试随机问题。

票数 10
EN

Stack Overflow用户

发布于 2013-10-03 19:05:22

SwingUtilities.invokeLater确保代码在事件调度线程(EDT)上执行。Swing是单线程的,所有组件的实例化和显示都应该发生在EDT上.事情可能不是这样的,但你可能会遇到问题。

票数 4
EN

Stack Overflow用户

发布于 2013-10-03 19:07:13

Swing具有基于单线程事件环的设计,并不是线程安全的,只有线程安全部分是用于将控制传递到Swing事件循环的一组invokeXXX()方法。

您的“损坏”代码工作得很好,因为没有任何其他代码试图同时从事件循环中接触到Swing数据结构的同一部分。

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

https://stackoverflow.com/questions/19167154

复制
相关文章

相似问题

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