Quelle est la meilleure façon de quitter une application Java avec du code?
Quelle est la meilleure façon de quitter une application Java avec du code?
Réponses:
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)
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.
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.
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()
.
Je suis d'accord avec Jon, demandez à votre application de réagir à quelque chose et appelez System.exit ().
Assurez-vous que:
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.
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 }
Runtime.getCurrentRumtime().halt(0);
halt
: "Cette méthode doit être utilisée avec une extrême prudence. Contrairement à la exit
mé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
.
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.
System.exit (ABORT); Arrêtez le processus immédiatement.
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();
}
}