为了账号安全,请及时绑定邮箱和手机立即绑定

Java事件-分派线程解释

Java事件-分派线程解释

慕慕森 2019-07-01 10:11:33
Java事件-分派线程解释最近,我开始学习和探索Java中GUI编程的基础知识。经过一段时间的编程,我只做了后端工作或工作,因此,我接触到的用户界面最接近命令控制台(我知道这令人尴尬)。我使用的是Swing,据我所知,这意味着我也在使用AWT。我的问题是基于这段代码:java.awt.EventQueue.invokeLater(new Runnable() {     public void run() {         new frame.setVisible(true);     }} );我已经对此进行了一段时间的研究,因为我想完全理解这段奇怪的代码,并多次遇到“事件分派线程”这个术语。如果我错了,请纠正我,但据我所知,这与使用多个线程以及JavaSwing如何解释这些线程有关。我还收集到,上面的代码用于确保所有线程在创建窗口之前都是“安全的”,因此产生了InvokeLater?我读到过:“您只能调用从事件分派线程对框架进行操作的方法”而且,只有在某些情况下,才能从主方法调用在帧上操作的方法。谁能告诉我事件发送线程到底是什么?它如何与执行的多个线程相关,以及如何不安全地从主方法中调用这些线程?还有为什么我们需要这个发票?我们不能像其他对象一样创建窗口吗?我在我的研究中遇到了一些障碍,因为我没有抓住这些关系和想法。附带的一点是,我喜欢把我的知识建立在深入理解的基础上,因为我相信这将导致最好的总体结果,因此也就是最好的方案。如果我深入理解了一些东西是如何工作的,那么你可以有效地使用技巧和调整,而不仅仅是把它们复制回代码中,所以请不要害怕给我一些更深入的解释和扩展我的知识。谢谢。
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

EventDispatchThread(EDT)是只为Swing GUI和*Swing的相关事件(例如创建/更改/更新)保留的特殊线程Swing JComponents,请回答更多问题这里这里

的所有输出到GUI。BackGround TasksRunnable#Thread必须被包裹在InvokeLater(),从同步对象到invokeAndWait();


查看完整回答
1 反对 回复 2019-07-01
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我对迟来的答复表示歉意,我一直忙于工作。实际上,你的帖子非常简洁地回答了我的许多问题,所以我想为此向你表示感谢。好的,如果我正确理解了,那么为了在GUI上操作,我应该使用具有Runnable对象的InvokeLater()方法,通过这样做,我可以确保我总是使用EDT吗?我还读到了现在正式支持的SwingWorker类。这个类会被认为优于InvokeLater方法吗?还是我误解了它们解决了两个不同的问题?

查看完整回答
1 反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信