在java中关闭窗口事件

我添加了一个窗口状态监听器如下:

this.addWindowStateListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ExitAction.getInstance().actionPerformed(null); } }); 

但是当我使用X关闭按钮时,事件不会被调用。 我认为这与netbean jdesktop框架有关。 但我找不到可能出现的问题。 谢谢你的帮助。

windowClosingWindowListener接口的一部分。 使用addWindowListener而不是addWindowStateListener

通常,您使用WindowListener。

查看关闭应用程序我使用的方法,虽然我必须承认我从未尝试过使用Netbeans,因为我没有使用IDE。

没有直接回答你的问题(因为已经给出了答案),但我认为你想退出你的程序(或只是隐藏一个窗口)。 对于这些情况,有一个更短的解决方案:

 window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

刚刚在我的Swing程序中调试了类似的问题。 事实certificate,这是一个Java错误,在创建Swing UI之前调用ImageIO时会杀死系统UI事件。 在这里看一个最小的例子 –

https://stackoverflow.com/questions/18964138/osx-specific-new-java-ui-bug-reproducable-java-imageio-close-window-event-bug

此错误会阻止系统UI事件(例如窗口关闭)传递到Java。

正如Java文档所说,要实际关闭窗口,侦听器应该调用window的dispose或setVisible(false)方法。

谢谢大家帮我解决问题。 我没有完全记下它,但以下代码解决了这个问题:

  Frame[] frames = Frame.getFrames(); for(Frame f: frames){ f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ExitAction.getInstance().actionPerformed(null); } }); } 

看起来好像框架添加了额外的框架。 谢谢,

正如其他人已经指出WindowListener就是你所追求的……但是从现在开始重写方法时你应该这样做:

 this.addWindowStateListener( new WindowAdapter() { @Overrides public void windowClosing(WindowEvent e) { ExitAction.getInstance().actionPerformed(null); } }); 

然后编译器将告诉您何时没有实际覆盖方法,而是添加一个新方法(在这种情况下永远不会被调用)。