首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于EDT (Java)

关于EDT (Java)
EN

Stack Overflow用户
提问于 2014-01-03 10:44:46
回答 2查看 420关注 0票数 3

我在互联网上读过很多关于什么时候应该在EDT运行,什么时候不应该运行的文章。但我仍然不确定我是否理解,所以我想问几个问题:

  1. 默认情况下,在EDT的内部将运行哪些代码?
  2. 在EDT之外的默认中将运行哪些代码?
  3. 什么时候我应该使用InvokeLater(),以便在默认情况下会在EDT之外运行的东西会在其中运行?
  4. 什么时候应该通过创建新线程并将代码放入EDT中来阻止代码在EDT中运行(默认情况下)?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-01-03 10:52:56

  1. 事件侦听器执行的所有代码。
  2. main方法中的代码,在线程中执行的代码,这些代码是您明确启动的,或者是通过使用计时器或SwingWorker启动的。
  3. 在主方法中创建Swing GUI时。或者当您希望从后台线程中与Swing组件(或其模型)交互时。
  4. 当这段代码被阻塞(比如长IO)或执行超过几毫秒时。从EDT内部执行的所有代码都阻止这个线程完成其主要工作:重新绘制GUI并对事件做出反应。
票数 4
EN

Stack Overflow用户

发布于 2014-01-03 10:52:48

首先,非常感谢、编辑、格式,您的问题非常好。这对回答你的问题有很大帮助。

另外,我不得不承认我对我的答案不能百分之百肯定,所以伙计们:如果我错了,请随时纠正我。

  1. 更改图形用户界面的所有内容。
  2. 对此不太确定。
  3. 如果您需要使用时间密集型计算更新gui。例如,如果您想在JLabel中显示0到100000000之间的数字。
  4. 所有会阻止你的gui与用户交互的东西,因为它需要大量的时间,例如,使用大量的数据集进行一些计算。但是,您需要确保只从一个线程访问值,或者将线程与volatilesynchronize...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20901770

复制
相关文章

相似问题

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