7
votes

Fermer un programme Java correctement lorsque JDialog est la fenêtre principale

J'ai un JDialog comme la fenêtre principale de mon application (à l'origine, c'était un jframe, mais il a montré dans la barre des tâches que je ne voulais pas).

actuellement je fais: xxx

et quand je clique sur un bouton de sortie: xxx

mais le processus encore Semble suspendre dans l'arrière-plan

jframe avait jframe.exit_on_close qui semblait faire ce que je voulais.

Comment puis-je fermer mon application? < / p>


0 commentaires

6 Réponses :


6
votes

Vous pouvez ajouter xxx

où vous souhaitez que le programme se termine, peut-être immédiatement après la ligne Disposer ().


1 commentaires

Je pensais que ça fermait la totalité de la JVM. Ne fera-t-il que fermer pour l'application actuelle?



1
votes

Vous savez que le exit_on_close champ est également hérité par jdialog , non?

Comme mentionné par @camickr , exit_on_close n'est pas une valeur valide pour le setDefaultCloseoperation Méthode de la classe jdialog . Comme indiqué par l'API,

Définit l'opération qui se passera par défaut lorsque l'utilisateur initie une "fermeture" sur cette boîte de dialogue. Vous devez spécifier l'un des éléments suivants Choix:

  • do_nothing_on_close (défini dans windowConstants ): Ne faites rien; exiger que le programme gère l'opération dans le Méthode de visualisation de fenêtre d'un objet de fenêtre déposé.
  • hide_on_close (défini dans windowConstants ): masque automatiquement la boîte de dialogue après avoir appelé tout fichier windowlistener objet.
  • Dispose_on_close (défini dans WindowsConstants): masque et jetez automatiquement la boîte de dialogue après avoir appelé tous les objets enregistrés WindowListener Objets.

    Si EXIT_ON_CLOSE est transmis comme argument, un IllegalArgumentException sera lancé.


6 commentaires

Ouais, j'utilisais WindowBuilder pour créer l'interface graphique et ce n'était pas une option disponible, donc je pensais que ce n'était pas disponible. Merci


-1, vraiment? Dans JDK6, selon l'API EXIT_ON_CLOSE n'est pas valide et lorsque j'essaie d'utiliser, je reçois une idée illegalArgumentException au moment de l'exécution. S'il s'agit d'une nouvelle fonctionnalité de JDK7, je vais supprimer le vote Down après que un commentaire soit ajouté indiquant la nouvelle fonctionnalité.


@mre pas facile à faire cela de manière programmatique, tous les conteneurs de haut niveau ont quelque chose **** l'appeler mal, Stackoverflow.com/questions/5540354/... , peut-être pour rafraîchir un autre problème (s) < un href = "http://stackoverflow.com/questions/6309407/remove-top-level-container-on-level-container-on-runtime" Titre = "Supprimer le conteneur de niveau supérieur sur l'exécution"> Stackoverflow.com/questions/6309407/...


@camickr, hmm..vous est vrai. Je ne peux toujours pas trouver où cela est écrit dans l'API cependant. Je ne suis pas sûr que le vote au bas soit justifié, mais c'est le genre de personne que vous êtes. Donc quel que soit. Si vous pouviez me signaler aux lignes spécifiques qui indiquent que ce champ n'est pas valide, je serais plus que reconnaissant. Mais cela ne fait pas ma réponse faux. L'API montre clairement que exit_on_close est un champ hérité. Pas ma faute Cette subtilité particulière est mal documentée Afaik.


@mre, donc c'est ok pour upvoter de mauvaises réponses, mais ce n'est pas correct pour bowervoter de mauvaises réponses? Quel est le point de descendre? Cette réponse est fausse et trompeuse, c'est pourquoi j'ai voté! Les valeurs valides sont clairement documentées dans l'API pour la méthode SETDEFAULTCOSOPERATION () . Je ne peux toujours pas croire que cela a eu un uppot après que mon commentaire ait été fait. Au fait, non où dans ma réponse, j'ai attaqué votre personnage, j'ai simplement indiqué que la réponse était fausse. Nous faisons tous des erreurs (je sais que je fais tout le temps), j'espère juste que nous apprenons d'eux.


@camickr, je ne suis pas sûr qui a suscité, mais merci de me pointer dans la bonne direction. Et pour d'autres, voir .



14
votes

Vous devez ajouter un windowListener qui fera System.exit (0) lorsque la boîte de dialogue se ferme. XXX

Bien sûr, le système.exit (0) après avoir appuyé sur le bouton de sortie. (qui a été suggéré ailleurs dans ce fil) reste nécessaire.


1 commentaires

Ça y est. Dans mon cas, nous avons `jPanel` étendu wiith `jdualog` donc je n'ai donc pas pu appeler `addwindowlisternerner` directement. Mais puisque nous avons étendu notre boîte de dialogue avec jdialog , j'ai pu appeler `Super.adddwindowstenner ...` et ça marche.



3
votes

envisagez d'utiliser JWindow (Un-décorettad par DEFALUT), mais c'est peu compliqué de bit, que jwindow Initialisations requises à partir de jframe (juste doit exister, rien d'autre) comme parent

meilleur serait d'ajouter windowlistener et tous les événements / actions serait redirigé / géré de cette façon


0 commentaires

0
votes

Pour moi, travaillez seulement avec WindowsClingez l'événement:

dialog.addWindowListener(new WindowAdapter() 
                @Override
                public void windowClosing(WindowEvent e) {
                     System.exit(0);
                }
    });


0 commentaires

0
votes

Vous pouvez essayer ceci ci-dessous code source incroyable - xxx

ceci ci-dessus a été éteint le processus ainsi qu'après disposition du conteneur JDialog, également un avantage supplémentaire, si ce JDialog est en cours d'exécution au-dessus de tout autre jframe ou JDialog, le parent ne se terminera pas, mais si cette JDialog fonctionne seul, le processus sera terminé complètement, profitez-en.


0 commentaires