小编典典

在最后一个窗口上调用处理后,java swing程序未关闭

java

前言:这是我完成的第一个真正的挥杆程序。

我有一个Swing程序,应该有一个JButton退出该程序。该按钮触发this.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)

任何人都可以向我指出正确的方向,为什么程序在此之后仍无法关闭?我已经进行了一些谷歌搜索,但到目前为止还没有到任何地方。如果您需要更多信息,请告诉我

谢谢 :)


阅读 265

收藏
2020-11-26

共1个答案

小编典典

因为dispose()方法仅释放资源。

该文档有一个

注意: 丢弃Java虚拟机(VM)中的最后一个可显示窗口时,VM 可能会 终止。有关更多信息,请参见
AWT线程问题

你注意到 5月

上面的链接为您提供有关 自动关机
功能的详细信息。您可以阅读有关此内容的更多信息,也可以通过替换this.dispose()System.exit(0)

2020-11-26