java swing程序在最后一个窗口调用dispose后未关闭

java swing程序在最后一个窗口调用dispose后未关闭,java,swing,dispose,shutdown,Java,Swing,Dispose,Shutdown,前言:这是我做的第一个真正的swing程序 我有一个swing程序,其中一个JButton应该退出该程序。该按钮触发此。dispose;。当我单击这个JButton时,它确实会使窗口完全消失,但是查看调试器,程序本身仍然在运行 我的主要方法仅包括: public static void main (String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() {

前言:这是我做的第一个真正的swing程序

我有一个swing程序,其中一个JButton应该退出该程序。该按钮触发此。dispose;。当我单击这个JButton时,它确实会使窗口完全消失,但是查看调试器,程序本身仍然在运行

我的主要方法仅包括:

public static void main (String[] args)
{
  java.awt.EventQueue.invokeLater(new Runnable()
  {
    public void run()
    {
      new StartupGui().setVisible(true);
    }
  });
}
“我的退出”按钮与“操作”按钮类似:

private void exitButtonActionPerformed(java.awt.event.ActionEvent evt)
{
  this.dispose();
}
我还尝试了以下退出按钮:

private void exitButtonActionPerformed(java.awt.event.ActionEvent evt)
{
  java.awt.EventQueue.invokeLater(new Runnable()
  {
    public void run()
    {
      dispose();
    }
  });
}
按下退出按钮后查看调试器,我看到以下内容,并且仅看到以下内容:

Daemon Thread [AWT-XAWT] (running)
Thread [AWT-Shutdown] (running)
Thread [AWT-EventQueue-0] (running)
Thread [DestroyJavaVM] (running)
有人能告诉我为什么程序在这一点之后没有关闭吗?我在谷歌上搜索了一下,但到目前为止还没有找到任何进展。如果你需要更多的信息,请告诉我


谢谢:

这篇文章:讨论在1.4中更改的AWT关闭行为。尽管如此,这篇文章还是指出,要彻底关闭可能会很棘手

在没有看到其余代码的情况下,我只能提供一些指针:

确保没有其他未处理的隐藏帧 确保AWT队列上未生成任何消息,即在EventQueue中设置断点。 否则,请查看这些线程的堆栈框架,看看它们正在忙什么
这篇文章:讨论在1.4中更改的AWT关闭行为。尽管如此,这篇文章还是指出,要彻底关闭可能会很棘手

在没有看到其余代码的情况下,我只能提供一些指针:

确保没有其他未处理的隐藏帧 确保AWT队列上未生成任何消息,即在EventQueue中设置断点。 否则,请查看这些线程的堆栈框架,看看它们正在忙什么 因为方法只释放资源

医生有一个

注意:当Java虚拟机VM中的最后一个可显示窗口被释放时,VM可能会终止。有关更多信息,请参阅

你注意到五月了吗

上面的链接提供了有关自动关机功能的详细信息。您可以阅读更多关于这方面的内容,也可以简单地通过将this.dispose替换为System.exit0来解决这个问题,因为该方法只释放资源

医生有一个

注意:当Java虚拟机VM中的最后一个可显示窗口被释放时,VM可能会终止。有关更多信息,请参阅

你注意到五月了吗


上面的链接提供了有关自动关机功能的详细信息。您可以阅读更多关于这方面的内容,也可以简单地通过将this.dispose替换为System.exit0来解决这个问题

您正在运行哪个版本的jdk?当所有窗口都被释放时,旧版本不会关闭。$java-version生成build 1.6.0_20-b02。我在64位Arch Linux机器上运行这个程序。您正在运行哪个版本的jdk?当所有窗口都被释放时,旧版本不会关闭。$java-version生成build 1.6.0_20-b02。我在64位Arch Linux机器上运行这个。