De prévenir ou d'Annuler la fermeture de la première étape, en JavaFX 2.2
Comme le titre l'indique, ma question est, comment puis-je prévenir ou d'annuler la fermeture de la première étape, en JavaFX 2.2? J'ai fait quelques recherches sur Google, et voici les deux liens semblait répondre à la question:
J'ai essayé les méthodes expliquées par ces deux liens, mais malheureusement pour moi, aucun d'entre eux fonctionne. Alors, sans plus tarder, voici ce que j'avais fait.
Tout d'abord, j'ai essayé de joindre un OnCloseRequest
à la primaryStage
comme suit.
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); //I tried without this line also.
}
}
});
Quand canExit()
retourne false
, j'ai essayé d'empêcher l'événement de se propager plus loin et cause pour quitter l'application en appelantevent.consume()
. Mais la scène est arriver fermé/caché et j'ai eu des messages d'erreur suivants sur Netbeans fenêtre de sortie. Il ne cesse de revenir à plusieurs reprises jusqu'à ce que je me force à fermer l'application à partir de 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
Avoir goûté à l'échec de cette tentative, j'ai changé OnCloseRequest
à OnHiding
avec la perspective de succès.
primaryStage.setOnHiding(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (!canExit()) {
event.consume();
primaryStage.show(); //I tried without this line also.
}
}
});
Bien, j'ai goûté l'échec de cette tentative trop, je pense avoir fait quelques progrès. Il n'y a pas de messages d'erreur cette fois, et pas besoin de forcer la fermeture de l'application à partir de Netbeans.
Puis j'ai lu à propos de la magie de la méthode nommée setImplicitExit()
dans le Platform
classe. Pensant que c'est ce qui me manquait, j'ai essayé Platform.setImplicitExit(false);
, avec les deux les deux méthodes comme suit:
-
OnCloseRequest
versionPlatform.setImplicitExit(false); primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { if (!canExit()) { //... } else { Platform.exit(); } });
Pas de différence, la scène se ferme/caché, et le même message d'erreur s'affiche à plusieurs reprises.
-
OnHiding
versionPlatform.setImplicitExit(false); primaryStage.setOnHiding(new EventHandler<WindowEvent>() { if (!canExit()) { //... } else { Platform.exit(); } });
Début sur une note positive, l'application à ne pas avoir quitté comme précédemment. Mais, la note négative est que la scène est toujours fermé/caché.
Maintenant, je suis hors d'armes/équipements dans mon manège à résoudre, et je suis donc ici pour demander l'aide de tes héros et champions. Alors, Comment puis-je résoudre ce problème ou qu'ai-je fait de mal ou ce qui me manque?
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé le code suivant dans mon application et il fonctionne parfaitement,
(java:3187): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion 'GTK_IS_WIDGET (widget)' failed
) apparaît en continu sur la console/terminal jusqu'à ce que je me force à quitter l'application.Je pense que c'est un bug avec JavaFX pour Linux. J'ai couru dans le même problème sur Javafx 2.2.21-b11. Selon le contexte, le GTK erreurs peuvent ou peuvent ne pas être présents, mais de toute façon, la consommation de la requête de fermeture de l'événement, n'a pas empêché la fenêtre de se fermer (mais le processus continue de fonctionner). La même application sur Windows se sont comportés comme je m'attends. Donc, au mieux, nous avons une différence de comportement entre les plates-formes.
J'ai déposé un rapport de bogue, vous pouvez upvote si vous le souhaitez: https://javafx-jira.kenai.com/browse/RT-33295
Voici la source de mon application de test
Je pense que vous avez obtenu le
onCloseRequest()
concept de mal. Si vous consommez de l'événement que vous annuler la fermeture! De sorte qu'il fonctionne dans l'autre sens, sicanExit()
renvoie la valeur false, vous consommez de l'événementcanExit()
pour faire l'extrait de code plus lisible. Mais, cela ne fonctionne toujours pas de réponse pour l'erreur que j'obtiens.show
fera l'affaire. Que trop ne fonctionne pas. J'ai déjà commenté sur la ligne en questionI tried without this line also.
Qui a fonctionné pour moi