Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图形用户界面显示在EDT上_Java_Swing_Awt_Event Dispatch Thread - Fatal编程技术网

Java 图形用户界面显示在EDT上

Java 图形用户界面显示在EDT上,java,swing,awt,event-dispatch-thread,Java,Swing,Awt,Event Dispatch Thread,我读过这句话“图形用户界面显示在EDT上”。有人能解释一下这句话吗?我知道事件侦听器是在EDT上执行的,但是GUI是如何在EDT上显示的。语句“GUI显示在EDT上”是不精确的,具有误导性的。实际情况是,GUI对象上的所有操作,包括它们的实例化,都必须在EDT上进行。因此,所有导致GUI元素显示在屏幕上的操作也会发生在EDT上。EDT负责所有操作。它接受任何事件(鼠标/键盘单击等),然后根据事件调用任何操作。如果您希望在UI上执行任何操作(显示代码中的按钮等),EDT将再次负责在屏幕上显示 理想

我读过这句话“图形用户界面显示在EDT上”。有人能解释一下这句话吗?我知道事件侦听器是在EDT上执行的,但是GUI是如何在EDT上显示的。

语句“GUI显示在EDT上”是不精确的,具有误导性的。实际情况是,GUI对象上的所有操作,包括它们的实例化,都必须在EDT上进行。因此,所有导致GUI元素显示在屏幕上的操作也会发生在EDT上。

EDT负责所有操作。它接受任何事件(鼠标/键盘单击等),然后根据事件调用任何操作。如果您希望在UI上执行任何操作(显示代码中的按钮等),EDT将再次负责在屏幕上显示


理想情况下,所有的按钮初始化(UI操作等)都应该由EDT完成,尽管这不是强制性的(在android中是)。文档中说不要执行冗长的任务是为了:正如前面提到的,因为EDT处理所有事情,如果EDT忙于冗长的任务,那么任何鼠标点击等都无法通过EDT处理,从而在UI体验中创建挂起

请参阅Oracle教程并通过单击标记EventDispatchThread阅读Q&A(添加到您的问题中)我读到了,文档中说,您不应该在EDT上执行冗长的任务,否则GUI可能会冻结。但事件应继续进入事件队列。
(但事件应继续进入事件队列。)
EDT在一瞬间将所有事件刷新到屏幕上,然后/after is EDT empty“我已阅读此语句“GUI显示在EDT上”。看起来有误导性,因为EDT不是决定GUI如何显示的人,而只是程序员必须用来操作GUI组件的线程(根据Java指南)。因此,问题应该是(?)“程序是否必须仅使用EDT创建/更新GUI组件?”。