Как обнаружить закрытый JFrame? - PullRequest
6 голосов
/ 21 ноября 2011

Я попробовал addWindowListener и внедрил windowClosing, он работает, когда я нажимаю кнопку закрытия, но когда я использую Cmd+Q для закрытия, windowClosing не вызывается, как я могу решить?Нужно ли обнаруживать Cmd+Q на Mac, Alt + F4 на Windows через ключевой приемник?Это общий прослушиватель для закрытия окна, через кнопку закрытия или клавиатуру, или событие Ctrl+Alt+Delete или Cmd+Option+Esc, чтобы убить фокус?Спасибо.

Ответы [ 5 ]

2 голосов
/ 21 ноября 2011

есть еще один метод windowClosed () попробуйте переопределить метод вещи. надеюсь, что это будет работать для вас.

2 голосов
/ 21 ноября 2011

Я не уверен, какова ситуация на Mac, но в Windows вы получаете обратный вызов windowClosing () от кнопки закрытия; Alt-F4; и если вы закроете приложение через диспетчер задач. Вы не получите обратный вызов, если вы используете диспетчер задач, чтобы убить процесс, но я бы не ожидал, что в любом случае.

Вы не забыли вызвать setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); в своем экземпляре JFrame, не так ли?

1 голос
/ 21 ноября 2011

Вы можете использовать эту библиотеку osx: com.apple.eawt.ApplicationListener

handleQuit(ApplicationEvent event)

Вероятно, добьется цели.

Информация из документов:

Вызывается, когда приложению отправляется событие Quit. Это событие генерируется, когда пользователь выбирает Quit из меню приложения, когда пользователь вводит Command-Q или когда пользовательский элемент управления щелкает значок приложения в Dock и выбирает Quit. Вы можете принять или отклонить запрос на выход.

Конечно, это решение не будет работать в Windows. Насколько я знаю, универсального решения, однако, не существует, так что это, вероятно, лучший путь.

1 голос
/ 21 ноября 2011

Похоже, вам нужно добавить KeyListeners и фабрику для определения того, что вы хотите для конкретной операционной системы.

Выезд

0 голосов
/ 16 июля 2016

Как вы сказали, windowClosing вызывается при нажатии кнопки (x). Я также на Mac, и способ получения CMD + Q для отправки сигнала приложению использует Runtime.addShutDownHook

Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
        // code to run when CMD+Q is pressed
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...