@Override
public void requestClose(boolean esc) {
onExit();
}
А метод должен будет выглядеть так: private void onExit() {
int result = (int) new FOptionPane()
.buildFOptionPane("Подтвердить:", "Выйти на рабочий стол?", FOptionPane.TYPE.YES_NO_TYPE, Constants.getDefaultCursor())
.get();
if (result == 0) {
// Пользователь выбрал "Да"
super.stop(); // Корректно завершаем приложение
}
// Если пользователь выбрал "Нет", ничего не делаем — окно остается открытым
}
if (GLFW.glfwWindowShouldClose(this.window)) {
this.listener.requestClose(false);
}
private void onExit() {
if ((int) new FOptionPane().buildFOptionPane("Подтвердить:", "Выйти на рабочий стол?", FOptionPane.TYPE.YES_NO_TYPE, Constants.getDefaultCursor()).get() == 0
) {
super.stop();
gameControllerService.exitTheGame(null, 0);
} else {
// Не закрываем окно:
glfwSetWindowShouldClose(((LwjglWindow) context).getWindowHandle(), false);
}
}
Создано окно игры, расширяющее SimpleApplication, прописан слушатель на ESC - открывается модальное окно в стиле "Уверены, что хотите выйти на рабочий стол?". Если нажать Да - вызывается стоп и закрытие программы. Если нажать Нет - ничего не происходит, всё хорошо.
Проблема: если нажать крестик (Х) окна игры - тоже появляется запрос на выход, т.к. я переопределил метод public void destroy() из LegacyApplication class
Но, если нажать Да - всё хорошо, если же нажать Нет - окно закрывается, а программа продолжает работать, ведь моё метод завершения работы не сработал, я не хотел выходить.
Вопрос: как мне запретить JME вообще закрывать окно самостоятельно? Где найти и выпилить к такой-то матери слушатель или какие ещё методы переопределить? Я сам хочу решать, когда мне закрывать окно игры.
Дополнительно:
мой метод выхода слушателя игры
переопределённый метод уничтожения контекста, в этом же классе