Я добавил слушателя статуса окна следующим образом:
this.addWindowStateListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ExitAction.getInstance().actionPerformed(null);
}
});
Но когда я использую X близких кнопок, событие не называют. Я думаю, что это - что-то, чтобы сделать с netbean jdesktop платформу. Но я не могу найти то, что могло быть проблемой.Спасибо за помощь.
windowClosing
является частью интерфейса WindowListener
. Используйте addWindowListener
вместо addWindowStateListener
.
Как отмечали другие, WindowListener - это то, что вам нужно... но отныне вы должны делать это, когда переопределяете метод:
this.addWindowStateListener(
new WindowAdapter()
{
@Overrides
public void windowClosing(WindowEvent e)
{
ExitAction.getInstance().actionPerformed(null);
}
});
Тогда компилятор скажет вам, когда вы на самом деле не переопределяете метод, а вместо этого добавляете новый метод (который в данном случае никогда не будет вызван).
.Обычно для этого используется WindowListener.
Проверьте Закрытие приложения для подхода, который я использую, хотя я должен признать, что никогда не пробовал его с Netbeans, так как я не использую IDE.
Спасибо всем, что помогли мне решить проблему. Я не полностью его недооцениваю, но следующий код решает проблему:
Frame[] frames = Frame.getFrames();
for(Frame f: frames){
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ExitAction.getInstance().actionPerformed(null);
}
});
}
Это выглядит так, как будто фреймворк добавляет дополнительные фреймы. Спасибо,
Как сказано в документации Java, для фактического закрытия окна слушатель должен вызвать метод dispose окна или setVisible(false).
Не отвечая на ваш вопрос напрямую (поскольку ответ уже был дан), но я предполагаю, что вы хотите бросить вашу программу (или просто скрыть окно) на выходе. Для этих ситуаций есть более короткое решение:
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);