繁体   English   中英

关闭Swing应用程序框架中的窗口

[英]Window closing in Swing Application Framework

我正在使用Swing Application Framework JSR(296)来实现基于Swing的Java应用程序。

与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)时进行此修改,它也会关闭主框架。

我该怎么做才能阻止整个应用程序退出并关闭对话框?

更新:我正在使用NetBeans IDE 7.01,它允许创建Swing Application Framework项目。 它生成一个项目骨架,如下所示:

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

NetBeans IDE允许从Window-> Properties菜单添加操作。

MyApp类扩展了org.jdesktop.application.SingleFrameApplication,这是我的主类。

MyAppView extends FrameView ,这是我的主要观点。

javax.swing.JDialog实现类位于myapp.view包中。

WindowEvent类有一个方法调用getWindow() ,它返回正在关闭的窗口。

windowClosing方法中,您可以检查:如果窗口是主应用程序窗口,请使用您当前拥有的代码。 如果不是,只需调用Window.dispose()

编辑 :我没有注意到您在应用程序中创建了自定义对话框。 也许你忘了处理它们? 您应该添加类似于auto generated about框中的代码:

@Action public void closeAboutBox() {
    dispose();
}

并在对话框关闭时调用此操作。 如果这不是问题,那么线程转储可能会帮助您在关闭主窗口时找出正在运行的线程。

我认为你实际需要的是setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 看看JavaDoc API ......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM