it-swarm-fr.com

Pourquoi =Java sortie avec succès après une exception non capturée?

Chaque fois qu'un programme Perl, Python, C++ ou TCL s'arrête avec une exception non conventionnelle, ces roulements de langue prennent soin d'enregistrer un code de sortie non nul pour le processus. Même les programmes basés sur Eclipse renvoient 1 si elles échouent pendant le démarrage. Les programmes sont exécutés par la norme Java.exe Cependant, rendez-vous heureusement zéro, peu importe la manière dont elles se terminent brusquement, à moins que le programme n'appelle System.exit() avec une valeur de sortie. Même AssertionFailedError ou UnsatisfiedLinkError sont rapportés au programme d'appel comme des sorties réussies.

Bien sûr, tous les systèmes n'ont pas de codes de retour de programme, mais UNIX et Windows étaient suffisamment importants pour justifier Java.lang.Process.exitValue() pour les processus d'enfants; Ne justifulez pas non plus d'honorer des conventions pour les processus parents?

Est-ce une faille dans la conception de la langue ou juste dans la mise en œuvre? Y a-t-il un argument selon lequel c'est une bonne idée?

23
James

Si le Java spécification de langue ne définit pas explicitement quelle valeur de sortie à attendre, c'est non défini et vous ne devez pas compter sur elle.

Vous devez prendre des attraper dans votre méthode principale et appelez votre système.exit (1) vous-même.

29
user1249