2010-06-25 73 views
1

前言:这是我所做的第一个真正的swing程序。前一个窗口调用了处理后的java swing程序不关闭

我有一个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) 

任何人都可以指出我正确的方向,为什么程序没有关闭后,这一点?我做了一些Google搜索,但到目前为止还没有到任何地方。如果您需要任何更多信息,只是让我知道

谢谢:)

+0

你运行的是什么版本的JDK更换this.dispose()解决这个问题?当所有的窗口被丢弃时,旧版本不会关闭。 – mdma 2010-06-25 00:05:48

+0

$ java -version会产生“build 1.6.0_20-b02”。我正在64位Arch Linux机器上运行它。 – vimalloc 2010-06-25 00:11:42

回答

4

因为dispose()满足hod只释放资源。

所述DOC具有

注:当Java虚拟机中的最后一个显示的窗口(VM)设置的,则VM 可以终止。有关更多信息,请参阅AWT Threading Issues

您是否注意到了可能

以上链接为您提供自动关机功能的详细信息。你可以阅读更多有关,或者你可以简单地用System.exit(0)

0

这推像素的文章:AWT shutdown and daemon threads讨论了在1.4改变了AWT关闭行为。尽管如此,文章指出,实现彻底关闭可能会非常棘手。

在没有看到代码的其余部分,我只能提供指针:

  • 确保有还没有被设置
  • 确保正在在AWT队列不产生消息没有其他隐藏帧(即在EventQueue中设置一个断点。)
  • 否则看这些线程的堆栈帧,看看他们都在忙着做
相关问题