2010-06-25 71 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中設置一個斷點。)
  • 否則看這些線程的堆棧幀,看看他們都在忙着做
相關問題