我添加了一个窗口状态监听器,如下所示:
this.addWindowStateListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ExitAction.getInstance().actionPerformed(null);
}
});
但是当我使用X关闭按钮时,不会调用该事件。 我认为这与netbean jdesktop框架有关。但我找不到可能出现的问题。 谢谢你的帮助。
答案 0 :(得分:10)
windowClosing
是WindowListener
界面的一部分。使用addWindowListener
代替addWindowStateListener
。
答案 1 :(得分:3)
通常你会使用WindowListener。
查看Closing an Application我使用的方法,但我必须承认我从未尝试使用Netbeans,因为我没有使用IDE。
答案 2 :(得分:3)
没有直接回答你的问题(因为已经给出了答案),但我认为你想在退出时退出你的程序(或只是隐藏一个窗口)。对于这些情况,有一个更短的解决方案:
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
答案 3 :(得分:1)
刚刚调试了Swing程序中的类似问题。事实证明,这是一个Java错误,在创建Swing UI之前调用ImageIO时会杀死系统UI事件。请参阅此处以获取最小示例 -
此错误会阻止系统UI事件(例如窗口关闭)传递到Java。
答案 4 :(得分:0)
正如Java文档所说,要实际关闭窗口,监听器应调用窗口的dispose或setVisible(false)方法。
答案 5 :(得分:0)
谢谢大家帮我解决问题。我没有完全记下它,但下面的代码解决了这个问题:
Frame[] frames = Frame.getFrames();
for(Frame f: frames){
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ExitAction.getInstance().actionPerformed(null);
}
});
}
看起来框架添加了额外的框架。 谢谢,
答案 6 :(得分:-2)
正如其他人已经指出WindowListener就是你所追求的......但是你应该在重写方法时从现在开始这样做:
this.addWindowStateListener(
new WindowAdapter()
{
@Overrides
public void windowClosing(WindowEvent e)
{
ExitAction.getInstance().actionPerformed(null);
}
});
然后编译器将告诉您何时没有实际覆盖方法,而是添加新方法(在这种情况下永远不会被调用)。