[英]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.