Comment quitter une application Java depuis le programme


145

Quelle est la meilleure façon de quitter une application Java avec du code?


1
Hmm. Je pense que la question est peut-être trop générale. Quitter dans quelles circonstances?
Allen George

3
Laisser tous vos threads non démon finir normalement?
Thorbjørn Ravn Andersen

Réponses:


192

Vous pouvez utiliser System.exit()à cette fin.

Selon la documentation Java 8 d'Oracle:

public static void exit(int status)

Arrête la machine virtuelle Java en cours d'exécution. L'argument sert de code d'état; par convention, un code d'état différent de zéro indique une interruption anormale .

Cette méthode appelle la méthode exit dans la classe Runtime. Cette méthode ne retourne jamais normalement.

L'appel System.exit(n)est effectivement équivalent à l'appel:

Runtime.getRuntime().exit(n)


102
System.exit(0);

Le "0" permet à quiconque a appelé votre programme de savoir que tout s'est bien passé. Si, cependant, vous quittez en raison d'une erreur, vous devriez System.exit(1);, ou avec un autre nombre différent de zéro correspondant à l'erreur spécifique.

De plus, comme d'autres l'ont mentionné, nettoyez d'abord! Cela implique la fermeture de fichiers et d'autres ressources ouvertes.


Je pensais que c'était System.exit (1)?
AFK

14
Comme Chris l'indique, System.exit(1)(ou tout autre nombre) est si vous voulez indiquer qu'il a fermé en raison d'une erreur. System.exit(0)indique que le programme s'est fermé normalement. Vous pouvez également changer 1 en n'importe quel nombre de votre choix, puis lorsque vous exécutez votre application à partir d'un script, vous pouvez déterminer s'il y a eu une erreur.
StormPooper

10

System.exit(int i)doit être utilisé, mais je l'inclurais dans une shutdown()méthode plus générique , où vous incluriez également les étapes de "nettoyage", la fermeture des connexions de socket, les descripteurs de fichiers, puis la sortie avec System.exit(x).


6

System.exit() n'est généralement pas le meilleur moyen, mais cela dépend de votre application.

La manière habituelle de terminer une application est de quitter la main()méthode. Cela ne fonctionne pas quand il y a d'autres threads non-Deamon en cours d'exécution, comme d'habitude pour les applications avec une interface utilisateur graphique (AWT, Swing etc.). Pour ces applications, vous trouvez un moyen de mettre fin à la boucle d'événement GUI (je ne sais pas si cela est possible avec AWT ou Swing), ou appelez System.exit().


4

L'utilisation dispose();est un moyen très efficace pour fermer vos programmes.

J'ai trouvé que l'utilisation de System.exit(x)réinitialise le volet des interactions et en supposant que vous ayez besoin de certaines informations, tout disparaît.


3

Je suis d'accord avec Jon, demandez à votre application de réagir à quelque chose et appelez System.exit ().

Assurez-vous que:

  • vous utilisez la valeur de sortie appropriée. 0 est une sortie normale, tout le reste indique qu'il y a eu une erreur
  • vous fermez tous les flux d'entrée et de sortie. Fichiers, connexions réseau, etc.
  • vous enregistrez ou imprimez une raison pour quitter, surtout si c'est à cause d'une erreur

2

La réponse est System.exit (), mais ce n'est pas une bonne chose à faire car cela annule le programme. Tout nettoyage, destruction que vous avez l'intention de faire ne se produira pas.


1

Il y a deux réponses simples à la question.

C'est la "manière professionnelle":

//This just terminates the program.
System.exit(0);

C'est une manière plus maladroite:

//This just terminates the program, just like System.exit(0).
return;

System.exit(0); return;est bien aussi, le retour empêche tout code ruther d'être exécuté avant que le système ne puisse quitter, sinon vous auriez besoin d'un indicateur (..i.e. if (!called_exit) { further code after exit statement }
ycomp

-1
Runtime.getCurrentRumtime().halt(0);

1
Mieux: Runtime.getRuntime (). Halt (0); A parfaitement fonctionné pour moi au sein de Scala!
Gerhard Hagerer

@GerhardHagerer mais que faire si vous obtenez le runti pas courant, moi?
Dude Bro

1
De la Javadoc pour halt: "Cette méthode doit être utilisée avec une extrême prudence. Contrairement à la exitméthode, cette méthode ne provoque pas le démarrage des hooks d'arrêt et n'exécute pas les finaliseurs non invoqués si la finalisation à la sortie a été activée. Si la séquence d'arrêt a déjà lancée, cette méthode n'attend pas les hooks d'arrêt ou finaliseurs en cours d'exécution pour terminer leur travail. " En bref, vous ne devriez pas avoir besoin d'utiliser halt, vous devriez préférer exit.
Erwin Bolwidt

-1

System.exit()fera ce que vous voulez. Mais dans la plupart des situations, vous souhaitez probablement quitter un thread et laisser le thread principal actif. En faisant cela, vous pouvez mettre fin à une tâche, mais également conserver la possibilité de démarrer une autre tâche sans redémarrer l'application.



-3

Cela devrait le faire de la bonne manière:

mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {

@Override
public void windowClosing(WindowEvent e) {
    if (doQuestion("Really want to exit?")) {
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.dispose();
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.