Come dice il titolo, la mia domanda è, come posso impedire/annullare la chiusura della fase primaria in JavaFX 2.2? Ho fatto qualche ricerca su Google, e le seguenti due collegamenti sembrava di affrontare la questione:Previene/annulla la chiusura della fase primaria in JavaFX 2.2
Ho provato i metodi spiegate da questi due link, ma purtroppo per me , nessuno di loro funziona. Quindi, senza ulteriori indugi, ecco cosa ho fatto.
In primo luogo, ho provato ad allegare un OnCloseRequest
allo primaryStage
come segue.
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); // I tried without this line also.
}
}
});
Quando canExit()
rendimenti false
, ho cercato di impedire l'evento di propagarsi ulteriormente e provocare per uscire l'applicazione chiamando event.consume()
. Ma la fase si sta chiudendo/nascosta e ho ricevuto i seguenti messaggi di errore sulla finestra di output di Netbeans. Continua a venire ripetutamente fino a quando non chiudo l'app da 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
aver assaggiato il fallimento in questo tentativo, ho cambiato OnCloseRequest
-OnHiding
con l'aspettativa di successo.
primaryStage.setOnHiding(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); // I tried without this line also.
}
}
});
Anche se, in questo tentativo, ho assaggiato il fallimento, penso di aver fatto dei progressi. Non ci sono messaggi di errore questa volta e non è necessario forzare la chiusura dell'applicazione da Netbeans.
Poi ho letto di un metodo magico denominato setImplicitExit()
nella classe Platform
. Pensando che questo è quello che mi mancava, ho provato Platform.setImplicitExit(false);
con entrambi i due metodi come segue:
OnCloseRequest
versionePlatform.setImplicitExit(false); primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { if (!canExit()) { // ... } else { Platform.exit(); } });
Nessuna differenza, lo stadio viene chiuso/nascosto, e lo stesso messaggio di errore viene ripetutamente.
OnHiding
versionePlatform.setImplicitExit(false); primaryStage.setOnHiding(new EventHandler<WindowEvent>() { if (!canExit()) { // ... } else { Platform.exit(); } });
Cominciando con una nota positiva, l'applicazione non viene usciti come in precedenza. Ma la nota negativa è che il palco è ancora chiuso/nascosto.
Ora, io sono fuori di armi/attrezzature nella mia armeria per risolverlo, e così io sono qui per richiedere l'aiuto di voi eroi e campioni. Quindi, come posso risolvere questo problema o cosa ho fatto di sbagliato o cosa mi manca?
Grazie per notare che, ho modificato la mia domanda. La condizione è diversa nel codice sul mio progetto, ho usato 'canExit()' per rendere lo snippet di codice più leggibile. Ma ancora non risponde per l'errore che sto ottenendo. – Jomoos
Ancora non capisco perché chiami primaryStage.show! The Stage non è affatto chiuso quindi perché chiamare show? – tomsontom
Inizialmente, ho provato senza quella linea e il palco si stava chiudendo/nascosto. Poi ho pensato che il palcoscenico fosse chiuso quando l'evento è stato sparato, e quindi mettere un 'show' farà il trucco. Anche questo non funziona. Ho già commentato la riga in questione come "Ho provato anche senza questa riga" – Jomoos