Perché Java esce con successo dopo un'eccezione non rilevata?

21

Ogni volta che un programma Perl, Python, C ++ o Tcl si ferma con un'eccezione non gestita, quei runtime linguistici si preoccupano di registrare un codice di uscita diverso da zero per il processo. Anche i programmi basati su Eclipse restituiscono 1 se falliscono durante l'avvio. I programmi eseguiti dallo standard java.exe , tuttavia, restituiscono felicemente zero, non importa quanto terminino bruscamente, a meno che il programma non chiami System.exit() con un valore di uscita. Anche AssertionFailedError o UnsatisfiedLinkError vengono riportati al programma chiamante come uscite di successo.

Naturalmente non tutti i sistemi hanno codici di ritorno del programma, ma Unix e Windows sono stati abbastanza importanti da garantire java.lang.Process.exitValue() per i processi figli; non garantiscono anche l'onorare le convenzioni per i processi dei genitori?

Si tratta di un difetto nella progettazione del linguaggio o solo nell'implementazione? C'è una discussione che sia una buona idea?

    
posta James 22.11.2010 - 13:23
fonte

1 risposta

27

Se la specifica del linguaggio Java non definisce esplicitamente quale dovrebbe essere il valore di uscita, allora è non definito e non dovresti fare affidamento su di esso.

Devi prendere Throwable nel tuo metodo principale e chiamare da te System.exit (1).

    
risposta data 22.11.2010 - 13:29
fonte

Leggi altre domande sui tag