前言:这是我做过的第一个真正的挥杆计划。
我有一个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)
有人能指出正确的方向,为什么程序在此之后没有关闭?我做了一些谷歌搜索,但到目前为止还没有到任何地方。如果您需要更多信息,请告诉我
谢谢:)
答案 0 :(得分:4)
因为dispose()方法只释放资源。
该文档有
注意:当Java虚拟机(VM)中的最后一个可显示窗口被丢弃时,VM 可能 终止。有关详细信息,请参阅AWT Threading Issues。
您是否注意到可能?
上面的链接提供了有关自动关机功能的详细信息。您可以阅读更多相关信息,或者只需将this.dispose()
替换为System.exit(0)
答案 1 :(得分:0)
此Pushing Pixels文章:AWT shutdown and daemon threads讨论了1.4中更改的AWT关闭行为。尽管如此,文章指出,要彻底关闭它可能会很棘手。
如果没有看到剩下的代码,我只能提供指针: