Pourquoi ma demande de toujours courir après la fermeture de la fenêtre principale?
Si je fais une JFrame comme ce
public static void main(String[] args) {
new JFrame().setVisible(true);
}
puis, après la fermeture de la fenêtre de l'application ne s'arrête pas (j'ai besoin de le tuer).
Quelle est la bonne façon de montrer principal de l'application windows ?
Je voudrais aussi savoir les motifs d'une proposition de solution.
Merci d'avance.
OriginalL'auteur | 2008-10-29
Vous devez vous connecter pour publier un commentaire.
Vous devriez appeler le
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dans votre JFrame.Exemple de code:
Ok j'ai trouvé la raison - il y a deux autres AWT threads en cours d'exécution et c'est pourquoi mon application ne s'arrête pas quand le "principal" méthode se termine. J'oublie toujours que JFrame n'est pas modale et crée les threads.
Pourquoi devrait-il être le comportement par défaut? De nombreuses applications de créer plusieurs fenêtres. Si c'était le défaut que vous auriez à changer chaque fois que vous créez une nouvelle fenêtre.
tout à fait d'accord que dispose_on_close doit être la valeur par défaut. Par exemple, vous devez également setDefaultcloseOperation pour les boîtes de dialogue modales ou ils vont traîner et de refuser votre application à partir de la sortie. aïe.
OriginalL'auteur Burkhard
Il y a une différence entre la fenêtre de l'application et de l'application elle-même... La fenêtre s'exécute dans son propre thread, et la finition
main()
ne mettra pas fin à l'application si d'autres threads sont toujours actifs. Lors de la fermeture de la fenêtre, vous devez également vous assurer que vous fermez l'application, éventuellement en appelantSystem.exit(0);
Yuval =8-)
OriginalL'auteur Yuval
Vous devez vous débarrasser de l'image, de l'invocation de la méthode dispose dans la fenêtre de votre interlocuteur ou à l'aide de setDefaultCloseOperation. Pour l'argument de la dernière, vous pouvez utiliser deux options:
DISPOSE_ON_CLOSE
ouEXIT_ON_CLOSE
.DISPOSE_ON_CLOSE
seulement disposer le cadre des ressources.EXIT_ON_CLOSE
dispose le cadre des ressources et invoque ensuite leSystem.exit
.Il n'y a pas de réelle différence entre les deux, sauf si vous avez non les fils de démon.
Je préfère utiliser
DISPOSE_ON_CLOSE
car de cette façon, je suis en mesure de constater si j'ai oublié de mettre fin à un fil, parce que la JVM s'arrête s'il n'y a pas plus de threads en cours d'exécution. C'est également la raison de la fermeture d'un bloc sans l'élimination ne va pas mettre fin à l'application, depuis le Swing crée un thread pour gérer les événements qui se termine uniquement lorsque disposer est invoquée.OriginalL'auteur jassuncao
Vous pouvez définir un fenêtre auditeur à l'image, afin que le programme s'arrête lorsque vous le fermez.
OriginalL'auteur giannis christofakis
La manière correcte de le faire (sauf si vous écrivez une très trivial unique fenêtre de l'application, c'est à dire pas d'autres fenêtres ou threads, etc..) est d'attraper le
windowClosing()
événement, et ensuite appeler ladispose();
méthode de la forme.Si votre programme n'est pas complètement sortie après cela, cela signifie que vous avez d'autres non-démon threads en cours d'exécution, et vous devez arrêter ces mieux que vous voyez l'ajustement en fonction de votre programme.
Appel
System.exit()
ousetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
force arrêt de tous les autres threads (et de l'ensemble du programme), ce qui signifie que votre code est moins portable, et de la force-l'arrêt des threads est évidemment dangereux (dans une programmation sorte de moyen).OriginalL'auteur Steve Smith