JFrame.setVisible()函数是否在Event Dispatch Thread中运行?

时间:2016-01-01 03:33:35

标签: 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("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);
     }
}

我知道actionPerformed()在Event Dispatch线程中运行。但是在上面的程序中,JFrame在actionPerformed()完全执行之前重新出现(因为dothis()仍在打印),为什么这发生了吗?

  • myFrame.setVisible()是否在另一个线程中运行?

    - 在这种情况下为什么不跟踪事件队列?

    - 如果myFrame.setVisible启动了EDT,我在上面的陈述中已经添加了myFrame.dispose()做了什么?

我之前发过类似的问题,但是当我练习时我遇到了更多的问题,我无法找到其中许多问题的在线解决方案。

  • 让我相信myFrame.setVisible()运行在与EDT不同的主题中的另一个问题是the frame reappears but the button is not removed yet。它再次出现在其中的按钮中,并在actionPerformed()完全执行之前重新出现。< / LI>
  • 我也在使用Eclipse控制台,dothis()正在控制台上显示内容,所以我认为dothis()必须在与EDT不同的线程上运行。这是对的吗?

有人可以给我一个详细的解释。长的答案也很受欢迎。我在网上找不到与我的问题有关的任何具体问题。请帮助我。

0 个答案:

没有答案