关于EDT(Java)
我已经在互联网上阅读了一些关于什么时候应该在EDT中运行的文章,以及什么时候不应该。 但是我仍然不确定我理解,所以我想问一些关于这个的问题:
-
在EDT 内默认运行哪些代码?
-
在EDT 之外默认运行哪些代码?
-
我什么时候应该使用InvokeLater(),以便默认情况下在EDT之外运行,将在其中运行?
-
什么时候应该阻止一段代码在EDT中运行(默认情况下),通过创建一个新线程并将该代码放入其中?
谢谢
- 由事件侦听器执行的所有代码。
- main方法中的代码,在您明确启动的线程内执行的代码,或者使用Timer或SwingWorker启动的代码。
- 在main方法中创建Swing GUI时。 或者当您想要从后台线程内部与Swing组件(或其模型)进行交互时。
- 当这段代码阻塞(如长IO)或执行时间超过几毫秒时。 从EDT内部执行的所有代码都阻止该线程完成其主要工作:重新绘制GUI并对事件做出反应。
首先,非常感谢您对问题进行编辑和格式化 。 在回答您的问题时,它会有很大帮助。
另外我不得不承认我对自己的答案并不是100%肯定,所以小伙子们:如果我错了,请随时纠正我。
-
一切都改变了您的图形用户界面。
-
对此不太确定。
-
如果你需要用时间密集的计算更新你的gui。 例如,如果要在JLabel中显示0到100000000之间的数字。
-
所有会阻止你的gui进行用户交互的东西,因为它需要很多时间,例如一些带有大量数据集的计算。但是你需要确保只从一个线程访问值或者用
volatile
来同步线程
synchronize
……