窗口关闭,程序退出时想做一点收尾动作,发现窗口关闭时不仅截获不了消息,甚至程序就没有真正退出,是不是FrameView本身就有缺陷啊,进程都无法正常关闭?求解释,求截获窗口关闭消息,求窗口关闭时应用如何正彻底退出。
package TimingApp;import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;public class TimingApp extends SingleFrameApplication {
    @Override protected void startup() {
        doShutDownWork();
        show(new TimingView(this));
    }
    @Override protected void configureWindow(java.awt.Window root) {
    }
    public static TimingApp getApplication() {
        return Application.getInstance(TimingApp.class);
    }
  private void doShutDownWork() {
    Runtime.getRuntime().addShutdownHook(new Thread() {      public void run() {
            System.out.println("Tell me where to stop");
      }
    });
  }
    public static void main(String[] args) {
        launch(TimingApp.class, args);
    }
}package TimingApp;import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.SingleFrameApplication;/**
 *
 * @author Administrator
 */
public class TimingView extends FrameView {
    public TimingView(SingleFrameApplication app) {
        super(app);
        initComponents();
        JFrame mainFrame = TimingApp.getApplication().getMainFrame();
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });    }
 
    @SuppressWarnings("unchecked")
    private void initComponents() {
        mainPanel = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        mainPanel.setName("mainPanel"); 
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(TimingApp.class).getContext().getResourceMap(TimingView.class);
        jLabel1.setText(resourceMap.getString("jLabel1.text")); 
        jLabel1.setName("jLabel1"); 
        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addGap(168, 168, 168)
                .addComponent(jLabel1)
                .addContainerGap(190, Short.MAX_VALUE))
        );
        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addGap(125, 125, 125)
                .addComponent(jLabel1)
                .addContainerGap(160, Short.MAX_VALUE))
        );
 
        setComponent(mainPanel);
    }                       
 
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel mainPanel;         
 
}调试状态下应用窗口关闭后暂停,进程状态如下:
Java