2010-04-08 12 views
0

J'ai le fil principal à partir de laquelle je démarre une fenêtre en utilisant invokeLater. Je cours mon application à partir de la ligne de commande. Donc, quand l'application est en cours d'exécution, je vois la fenêtre et ma ligne de commande est "bloquée" par l'application.Comment puis-je arrêter mon application?

Je peux arrêter l'application en fermant la fenêtre (par conséquent, la ligne de commande est débloquée) ou en tapant Ctrl-C dans la ligne de commande (par conséquent la fenêtre disparaît).

Je voulais être en mesure d'arrêter l'application en cliquant sur un bouton dans la fenêtre de l'application. J'ai utilisé setVisible(false) pour cela. Mais de cette manière, je ne peux atteindre l'objectif que partiellement. Ma fenêtre disparaît vraiment mais la ligne de commande est toujours bloquée. Donc, le logiciel est toujours en cours d'exécution.

Eh bien, je suppose que c'est parce que d'autres threads sont encore en cours d'exécution. Mais comment puis-je facilement fermer tous ces threads (comme je le fais en fermant la fenêtre de l'application manuellement).

Répondre

4
System.exit(0); 
+0

"Cliquer sur le bouton" déclenchera un événement. Placez ce code dans le gestionnaire d'événements. – Dave

+0

Merci! Ça marche pour moi. – Roman

+0

Gardez à l'esprit que c'est une manière plutôt dure de tuer votre application. –

0

Vous devez terminer tous les threads afin d'arrêter votre application. Juste cacher l'interface graphique ne finira pas le AWT-Thread. Jetez un oeil à l'API des classes GUI que vous utilisez comme les méthodes disposent.

1

Si c'est un JFrame vous montrer, vous pouvez dire à quitter l'application lorsque le cadre est fermé - la valeur par défaut est de simplement masquer le cadre:

myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Cette quittera l'application si l'utilisateur ferme la fenêtre (en haut à droite souvent le bouton [x]), en plus vous pouvez avoir un bouton Quitter dont le gestionnaire d'événements ferme la fenêtre en utilisant myFrame.dispose();