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
BackGround Tasks
, Runnable#Thread
invokeAndWait();
Smart猫小萌
TA贡献1911条经验 获得超7个赞
我对迟来的答复表示歉意,我一直忙于工作。实际上,你的帖子非常简洁地回答了我的许多问题,所以我想为此向你表示感谢。好的,如果我正确理解了,那么为了在GUI上操作,我应该使用具有Runnable对象的InvokeLater()方法,通过这样做,我可以确保我总是使用EDT吗?我还读到了现在正式支持的SwingWorker类。这个类会被认为优于InvokeLater方法吗?还是我误解了它们解决了两个不同的问题?
添加回答
举报
0/150
提交
取消