Java Swing应用框架中的窗口关闭
我正在为基于Swing的Java应用程序使用Swing应用程序框架JSR(296) 与AboutBox类似,我遵循了@Action的用法,并在我的项目中添加了一些JDialog类 问题是,当我关闭主框架时,我的应用程序仍然在后台运行。 为了克服这个问题,我在主应用程序类的configureWindow()中添加了以下代码:Java Swing应用框架中的窗口关闭,java,swing,swingx,swing-app-framework,Java,Swing,Swingx,Swing App Framework,我正在为基于Swing的Java应用程序使用Swing应用程序框架JSR(296) 与AboutBox类似,我遵循了@Action的用法,并在我的项目中添加了一些JDialog类 问题是,当我关闭主框架时,我的应用程序仍然在后台运行。 为了克服这个问题,我在主应用程序类的configureWindow()中添加了以下代码: protected void configureWindow(java.awt.Window root) { root.addWindowListener(new
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应用程序框架项目。
它生成一个项目框架,如下所示:
MyApp
|--myapp
| |--MyApp.java
| |--MyAppAboutBox.java
| |--MyAppView.java
|
|--myapp.resources
|--MyApp.properties
|--MyAppAboutBox.properties
|--MyAppView.properties
NetBeans IDE允许从窗口->属性菜单添加操作
MyApp类扩展了我的主类org.jdesktop.application.SingleFrameApplication
MyAppView扩展了FrameView
,它是我的主视图
javax.swing.JDialog的实现类位于myapp.view
包中。该类有一个方法调用,返回正在关闭的窗口
在窗口关闭
方法中,您可以检查:如果窗口是主应用程序窗口,请使用您当前拥有的代码。如果不是,就打电话
编辑:我没有注意到您正在应用程序中创建自定义对话框。也许你忘了处理它们?您应该添加类似“自动生成关于”框中的代码:
@Action public void closeAboutBox() {
dispose();
}
并在对话框关闭时调用此操作。如果这不是问题所在,线程转储可能会帮助您在关闭主窗口时找出哪个线程正在运行。该类有一个方法调用,该调用返回正在关闭的窗口
在窗口关闭
方法中,您可以检查:如果窗口是主应用程序窗口,请使用您当前拥有的代码。如果不是,就打电话
编辑:我没有注意到您正在应用程序中创建自定义对话框。也许你忘了处理它们?您应该添加类似“自动生成关于”框中的代码:
@Action public void closeAboutBox() {
dispose();
}
并在对话框关闭时调用此操作。如果这不是问题所在,线程转储可能会帮助您在关闭主窗口时找出正在运行的线程。我认为您实际需要的是setDefaultCloseOperation(JFrame.EXIT\u ON\u close)代码>。看一看…我认为您实际上在寻找的是setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE)代码>。看看…你可能想看看这个:看看他是如何关闭对话框的。谢谢,我想,在这里,我对org.jdesktop.application.SingleFrameApplicationhmm的configuerWindow()的实现有问题。。如果没有看到sscce,没有什么是可行的(注意:单机版不包括对Netbeans的依赖:-)-关闭main默认情况下应关闭所有相关/辅助窗口/对话框,无需手动操作。它从这开始-即使从X close选项关闭后,应用程序仍在后台运行(windows环境中的右上角)正如我所说的:它不应该-你要么显示sscce,要么独自一人…水晶球太过时了,在这里被禁止:-)你可能想看看这个:看看他是如何关闭对话框的。谢谢,我想,在这里,我对configuerWindow()的实现有问题org.jdesktop.application.SingleFrameApplicationhmm的。。如果没有看到sscce,没有什么是可行的(注意:单机版不包括对Netbeans的依赖:-)-关闭main默认情况下应关闭所有相关/辅助窗口/对话框,无需手动操作。它从这开始-即使从X close选项关闭后,应用程序仍在后台运行(windows环境中的右上角)正如我所说的:它不应该-你要么展示sscce,要么自己一个人…水晶球是如此古老,它们在这里被禁止:-)嗨,这很管用。我的主窗口/视图/框架是JFrame
的一个实例。因此,对于每次关闭的窗口,我都会在调用Application.getInstance(MyApp.class).exit()之前检查它是否是JFrame
的实例。那我为什么要用SAF呢?这个框架有它的生命周期,这是我感兴趣的+1技术上正确(+1),只是没有遵循appframework的风格:-)嗨,这很有效。我的主窗口/视图/框架是JFrame
的一个实例。因此,对于每次关闭的窗口,我都会在调用Application.getInstance(MyApp.class).exit()之前检查它是否是JFrame
的实例。那我为什么要用SAF呢?这个框架有它的生命周期,这是我感兴趣的+1技术上正确(+1),只是没有遵循appframework的风格:-)