Système.exit(0) en java

j'écris un programme d'application en utilisant swing. Je dois sortir de l'application en cliquant sur le JButton pour que je puisse utiliser System.exit() ou devrais-je utiliser d'autres méthodes, qui est la meilleure pratique. Si appeler System.exit() n'est pas une bonne pratique, alors expliquez pourquoi et indiquez la façon alternative de quitter l'application.

10
demandé sur Kris 2010-04-16 11:03:47

5 réponses

personnellement , je ne considère comme une meilleure pratique de laisser l'application sortir par elle-même : si vous écrivez une classe principale avec un main(String[] args) , avec du code vide, l'exécution il sortira silencieusement du programme Java.

mais, dans la plupart des cas, comme la plupart des développeurs, Je m'appuie sur System.exit(/an exit code/) , en particulier pour les applications Swing, où L'EDT Swing fonctionnera sans fin, comme justkt a écrit.. Le retrait connu de cette méthode est que la plupart du code d'application est pas appelé, ce que j'évite en mettant un crochet d'arrêt en appelant Runtime.addShutdownHook(Thread) , qui me permettra de nettoyer l'application (fermer les threads, et ainsi de suite).

6
répondu Riduidel 2017-05-23 12:30:46

en général, appeler System.exit(...) n'importe où sauf la méthode" principale " d'une application peut être problématique pour (au moins) les raisons suivantes.

  • c'est un obstacle à la réutilisation de votre code.

  • Il rend les tests unitaires dur. Par exemple, si votre code appelle System.exit lorsque vos tests JUnit effectuent un traitement d'erreur, que ce soit la fin de votre séquence de test!

le cas spécifique de l'appel System.exit(...) dans le bouton écouter pour le bouton "exit" n'est pas si mauvais. Il est peu probable que vous vouliez réutiliser le bouton listener quelque part qui ne nécessite pas ce comportement. En outre, vous pouvez probablement trouver une solution de rechange pour l'énigme de l'unité d'essai; par exemple, ne pas Unité tester cette méthode particulière!

cependant, je pense que j'essaierais toujours de faire en sorte que la sortie se fasse d'une manière différente. Par exemple, le main méthode lancer tout et puis bloquer sur un CountDownLatch, puis avoir le bouton écouter décrémenter la serrure. Lorsque la méthode main est débloquée, elle exécute le code d'arrêt d'urgence pertinent et retourne ou sort selon le cas.

11
répondu Stephen C 2013-10-23 22:53:16

Si vous avez besoin de définir un code de sortie pour votre application, vous devez utiliser le Système.sortie (je pense).

mais quand vous n'avez pas besoin d'un code spécifique (ou 0 est très bien), alors je préférerais que la JVM se termine" naturellement", ce qui arrive quand il n'y a plus de threads (Non-démon).

Habituellement, vous atteignez la fin de votre méthode principale.

je ferais attention avec le système.sortir parce qu'il peut y avoir d'autres les fils qui ont encore besoin de faire quelque chose et qui sortent sans les fermer correctement peuvent causer des dommages. Par exemple, la base de données intégrée peuvent encore avoir besoin de vider ses tampons.

si vous savez à propos de ces fils, vous pouvez généralement arranger pour qu'ils se terminent avec élégance. Si vous ne savez pas quels threads sont en cours d'exécution dans votre programme, vous avez de plus gros problèmes...

3
répondu Thilo 2010-04-16 07:22:28

en général la seule fois où vous avez besoin de faire un système.exit (n) est si vous voulez quitter un programme de ligne de commande avec un code d'erreur de sorte que tout ce qui surveille le programme peut détecter le code d'erreur.

ceci est très utile par exemple, si vous écrivez un programme conçu pour être exécuté à partir d'un script shell.

comme d'autres réponses disent Si, Si vous utilisez des fils, alors vous devez faire tous les efforts pour les éteindre avec élégance avant en considérant un Système.sortie (n)

3
répondu drekka 2010-04-16 07:36:59
Système

.exit peut être mauvais au moins lorsque vous avez plusieurs threads ou ressources qui doivent être fermés correctement (qui vivent en dehors de JVM). Si votre application n'est pas sortie quand vous pensez qu'il devrait alors vous devriez trouver la cause du problème et pas seulement appel Système.sortie.)(

la seule raison d'appeler le système.exit () serait de donner un code de sortie standard de none.

2
répondu mkorpela 2010-04-16 07:31:20