我认为提出问题的最简单方法是建立它。我对EDT的某些工作方式感到有些困惑。
是否在EDT上创建了Swing组件创建的对象?
要扩展这个问题,如果我创建一个JFrame,并在其构造函数中创建对象X,Y和Z,是否还在EDT上创建了X,Y,Z?
为了进一步扩展这个问题,如果在创建X的类中,它会在网络资源上等待阻塞,那么这会阻止EDT吗?
答案 0 :(得分:3)
是否在EDT上创建了Swing组件创建的对象?
仅当您的代码在EDT上运行时。在事件监听器中执行的代码在EDT上自动执行。
当您通过main()方法启动GUI时,它不会在EDT上运行,除非您专门将代码放在EDT上。这通常通过使用SwingUtilities.invokeLater()完成。
阅读Concurrency上的Swing教程以获取更多信息。另请阅读目录,特别是How to Make Frames
部分,了解在EDT上启动代码的简单示例。
如果在创建X的类中,它会在网络资源上等待阻塞,那么这会阻止EDT吗?
同样,只有在EDT上执行了代码块。