Java JFrame.setVisible()函数是否在事件分派线程中运行?

Java JFrame.setVisible()函数是否在事件分派线程中运行?,java,swing,Java,Swing,我在网上的一篇文章中读到了这一点 setVisible(true)副作用:即使您没有在EDT上初始化GUI,调用setVisible(true)的副作用是启动EDT线程,该线程将继续运行并监视GUI 如果这是真的,setVisible(false)对EDT有什么影响 theButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println("T

我在网上的一篇文章中读到了这一点

setVisible(true)
副作用:即使您没有在EDT上初始化GUI,调用
setVisible(true)
的副作用是启动EDT线程,该线程将继续运行并监视GUI

如果这是真的,
setVisible(false)
对EDT有什么影响

theButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.out.println("Test 1");
System.out.println("Still Testing");
panel.remove(theButton);
panel.revalidate();
panel.repaint();
myFrame.dispose();
dothis();
myFrame.setVisible(true);
}});
函数
dothis()

    public void dothis()
{
    for (int i=0;i<9999999999;i++)
     {
        System.out.println("Test 1"+i);
     }
}
public void dothis()
{

对于(int i=0;iA关键点在您的第一句话中:“…如果您没有在EDT上初始化GUI…”*如果*如果EDT还没有启动,那么
setVisible()
将启动它。大多数时候EDT已经启动,因此
setVisible()
默认情况下不会“在新线程中运行”@markspace好的。我明白了。关于其他问题有什么想法吗?…在我的情况下,
setVisible()
似乎没有在EDT中运行,因为在按钮消失之前帧会重新出现?
setVisible()
没有在新线程中运行。如果从EDT调用它,它将在EDT上运行。检查这里:
repaint()
“异步请求绘制操作”,以便在显示新窗口后可以处理对重新绘制的调用。本机窗口的初始化和实现不需要在EDT上进行(因为本机代码的工作方式),但窗口中的事件将传递到事件队列中,以便EDT进行处理,因此,在EDT中的其他事件完成处理之前,窗口可能会变为可见。一般来说,
setVisible
在其执行的线程内运行,但创建窗口并使其可见的操作将被放弃到本机系统,当操作系统完成请求并将事件管道放置到位时,方法将返回。有时,您可能会遇到UI组件想要执行的操作和尚未实现的帧之间的竞争条件(连接到本机对等方),当人们尝试使用
BufferStrategy
并在窗口可见之前尝试创建缓冲区时,您可以看到这一点