Java Swing中的EventQueue.invokeLater

时间:2014-09-25 16:37:39

标签: java multithreading swing invokelater awt-eventqueue

我试图了解这个主题的真正目的。 我已阅读过书籍和文章,但并没有清楚地了解EventQueue线程负责的内容。我见过很多例子,有时会使用,有时候不会。据我所知,这个线程负责所有GUI操作,例如创建窗口,组件,从OS API调用本机函数和其他东西。因此每次我更改GUI的某些部分时,我都应该将此操作传递给队列。 因此,使用队列应用程序默认具有两个线程主要事件和事件调度线程。所以我所有的bussines逻辑应该在主线程中执行(或者从main创建新线程)和EventQueue中的所有gui操作(例如向表中添加新项,更改标签更新列表中的文本)。另外我应该在EventQueue中创建主窗口的实例(类扩展jframe)?

我是对的吗?如果没有请解释。提前谢谢大家。

2 个答案:

答案 0 :(得分:3)

EventQueue管理单个GUI线程,因为它必须依赖主机平台的GUI资源,这些资源也是single-threaded。您可以在initial thread上运行非GUI代码,但您必须自己同步对任何共享数据的访问。 SwingWorkerhere,是一个方便的选择。

答案 1 :(得分:1)

听起来你已经掌握了它的主旨,是的。如果您的应用程序基本上是纯粹的GUI"您可以在EDT上执行所有操作(事件调度线程,这是运行到EventQueue.invokeLater的任何线程的线程),但您必须在EDT上创建窗口,这意味着您的main()方法必须使用{ {1}}至少一次。

因为在EDT上会通知GUI对象上的所有侦听器,所以通常不需要使用处理程序中的EventQueue.invokeLater

相关问题