Comment quitter une application Java depuis le programme

145

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

Olaseni
la source
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)

Jon
la source
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.

Chris Cooper
la source
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).

Bastien
la source
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().

Christian Semrau
la source
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.

Joshua
la source
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
Freiheit
la source
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.

Vaishak Suresh
la source
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;
Anton
la source
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);
Mec Bro
la source
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.

SmartFingers
la source
-3

System.exit (ABORT); Arrêtez le processus immédiatement.

pooploser0110
la source
Il n'existe pas de variable telle que ABORT.
Alfonso Vergara
-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();
    }
}
utilisateur3596517
la source