2012-07-06 95 views
1

我正在爲基於Swing的Java應用程序使用Swing應用程序框架JSR(296)。在Swing應用程序框架中關閉窗口

與AboutBox類似,我遵循@Action的用法並將一些JDialog類添加到我的項目中。

問題是,當我關閉主框架時,我的應用程序仍然在後臺運行。 爲了克服這個問題,我添加以下代碼,以我的主應用程序類的configureWindow():

protected void configureWindow(java.awt.Window root) { 

    root.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
     // write your code here 
      Application.getInstance(MyApp.class).exit(); 
     } 
    }); 
} 

但有了這個修改,每當我關閉對話框(包括AboutBox的),它也關閉了主框架。

我應該怎麼做才能防止整個應用程序退出並關閉對話框?

更新: 我正在使用允許創建Swing應用程序框架項目的NetBeans IDE 7.01。 它生成一個項目框架如下圖所示:

MyApp 
|--myapp 
| |--MyApp.java 
| |--MyAppAboutBox.java 
| |--MyAppView.java 
| 
|--myapp.resources 
    |--MyApp.properties 
    |--MyAppAboutBox.properties 
    |--MyAppView.properties 

NetBeans IDE中允許從窗口 - >屬性菜單添加操作。

MyApp類擴展了org.jdesktop.application.SingleFrameApplication這是我的主類。

MyAppView extends FrameView這是我的主要觀點。

執行類javax.swing.JDialogmyapp.view包中。

+0

你可能想看看這個:http://www.jroller.com/tackline/entry/closing_dialogs_on_escape,看看他如何關閉對話框。 – 2012-07-06 13:05:54

+0

謝謝,在這裏我想,我有一個org.jdesktop.application.SingleFrameApplication – JoeYo 2012-07-06 15:22:44

+0

hmm .. configuerWindow()的執行問題。沒有看到sscce沒有太多可行的(注意:獨立包括Netbeans的依賴:-) - 關閉主應該默認關閉所有相關的/次要的窗口/對話框,不需要手動操作。 – kleopatra 2012-07-07 09:35:35

回答

3

WindowEvent類有一個方法調用getWindow(),它返回正在關閉的窗口。

在您的windowClosing方法中,您可以檢查:如果窗口是主應用程序窗口,請使用您當前擁有的代碼。如果不是,只是叫Window.dispose()

編輯:我沒注意到你在你的應用程序中創建自定義對話框。也許你忘了處理它們?每當對話框關閉

​​

,並調用這個動作:你應該增加像在自動碼箱左右產生。如果這不是問題,則在關閉主窗口時,線程轉儲可能會幫助您找出哪個線程正在運行。

+0

嗨,這個作品。我的主窗口/視圖/框架是'JFrame'的一個實例。所以對於每個窗口關閉,我在調用Application.getInstance(MyApp.class).exit()之前檢查它是否是'JFrame'的一個實例。但是爲什麼我應該使用SAF?這個框架有它的生命週期,這是我感興趣的。+1 – JoeYo 2012-07-06 15:27:17

+0

技術上正確(+1),只是沒有遵循appframework的風:-) – kleopatra 2012-07-07 09:32:44

1

我想你實際上是在尋找的是setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);。看看 JavaDoc API ...

+0

我已更新我的問題,使其更好地理解。 – JoeYo 2012-07-07 07:00:23

相關問題