Jak mówi tytuł, moje pytanie brzmi: jak mogę zapobiec/anulować zamknięcie podstawowego etapu w JavaFX 2.2? Zrobiłem rozeznanie w Google, a następujące dwa linki wydawało się rozwiązać problem:Zapobieganie/anulowanie zamykania podstawowego etapu w JavaFX 2.2
Próbowałem metody wyjaśnione przez te dwa linki, ale niestety dla mnie żaden z nich nie działa. Tak więc, bez dalszych ceregieli, oto, co zrobiłem.
Po pierwsze, próbowałem dołączyć OnCloseRequest
do primaryStage
w następujący sposób.
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); // I tried without this line also.
}
}
});
Kiedy canExit()
powraca false
, starałem się zapobiec zdarzenie od propagacji dalej i spowodować, aby zamknąć aplikację, wywołując event.consume()
. Ale etap staje się zamknięty/ukryty i mam następujące komunikaty o błędach w oknie wyjściowym Netbeans. Ciągle nadchodzi, dopóki nie wymuszam zamknięcia aplikacji od Netbeans.
(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed
(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed
(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed
Po skosztował niepowodzenie w tej próbie, zmieniłem OnCloseRequest
do OnHiding
z oczekiwaniem sukcesu.
primaryStage.setOnHiding(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); // I tried without this line also.
}
}
});
Mimo, że próbowałem również niepowodzenia w tej próbie, myślę, że zrobiłem pewne postępy. Tym razem nie ma komunikatów o błędach i nie trzeba wymuszać zamknięcia aplikacji z Netbeans.
Potem czytałem o pewnej magicznej metodzie o nazwie setImplicitExit()
w klasie Platform
. Myśląc, że to jest to, czego mi brakuje, próbowałem Platform.setImplicitExit(false);
zarówno z dwóch metod w następujący sposób:
OnCloseRequest
wersjęPlatform.setImplicitExit(false); primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { if (!canExit()) { // ... } else { Platform.exit(); } });
żadnej różnicy, etap zostanie zamknięty/ukryte, a tym samym komunikat o błędzie pojawia się wielokrotnie.
OnHiding
wersjaPlatform.setImplicitExit(false); primaryStage.setOnHiding(new EventHandler<WindowEvent>() { if (!canExit()) { // ... } else { Platform.exit(); } });
Począwszy pozytywnym akcentem, aplikacja nie zostanie zakończony, jak wcześniej. Ale negatywną nutą jest to, że scena wciąż się zamyka/ukrywa.
Teraz jestem z broni/sprzętów w moim arsenale go rozwiązać, a więc jestem tutaj, aby poprosić o pomoc was bohaterów i mistrzów. Jak mogę rozwiązać ten problem lub co zrobiłem źle lub czego mi brakuje?
Dzięki za zauważyć, że I edycja moje pytanie. Warunek jest inny w kodzie w moim projekcie, użyłem 'canExit()', aby fragment kodu był bardziej czytelny. Ale nadal nie odpowiada za błąd, który otrzymuję. – Jomoos
Nadal nie rozumiem, dlaczego nazywasz primaryStage.show! Scena nie jest zamknięta, więc dlaczego wywołanie się wyświetla? – tomsontom
Początkowo próbowałem bez tej linii, a etap się zamykał/ukrywał. Wtedy pomyślałem, że może to być etap zamknięty, gdy wydarzenie zostanie odpalone, więc postawienie 'show' może załatwić sprawę. To też nie działa. Skomentowałem już o tej linii jako "próbowałem bez tej linii również." – Jomoos