Domanda

Per vari motivi chiamata System.exit e ' sconsigliato durante la scrittura Le Applicazioni Java, e , dunque, come posso notificare il processo di chiamata che non tutto sta andando secondo i piani?

Edit: La 1 è un standin per qualsiasi codice di uscita non zero.

È stato utile?

Soluzione

L'uso di System.exit è visto di buon occhio quando l'applicazione è davvero un sub-applicazione (ad es.servlet, applet) di una più ampia applicazione in Java (server):in questo caso il System.exit potrebbe interrompere la JVM e, di conseguenza, anche tutti gli altri sub-applicazioni.In questa situazione, gettando un'opportuna eccezione, che potrebbe essere intercettato e gestito dal framework di applicazioni/server è l'opzione migliore.

Se l'applicazione java è davvero pensato per essere eseguito come applicazione stand-alone, non c'è niente di sbagliato con l'utilizzo di System.exit.in questo caso, l'impostazione di un valore di uscita è probabilmente il modo più semplice (e anche più usato) modo di comunicare il successo o l'insuccesso al processo padre.

Altri suggerimenti

Sono d'accordo con il "generata un'Eccezione"la folla.Una ragione è che il Sistema di chiamata.uscita, il codice difficile da usare se si desidera che l'altro codice per essere in grado di usarlo.Per esempio, se si scopre che la classe sarebbe utile una web app, o un qualche tipo di messaggio di consumare app, sarebbe bello per consentire a tutti coloro i contenitori la possibilità di risolvere il guasto in qualche modo.Un contenitore può ritentare l'operazione, decide di registro e di ignorare il problema, è necessario inviare una mail ad un amministratore, etc.

Un'eccezione a questa sarebbe la tua main() metodo;questo potrebbe intercettare l'Eccezione, e chiamata System.exit() con un po ' di valore che può essere riconosciuto dal processo chiamante o script di shell.

System.exit() blocca, e creare una situazione di stallo se il thread che ha avviato utilizzato in arresto gancio.

Può essere pericoloso / problematico nel web servlet ambienti.

La generazione di un'Eccezione è generalmente considerato l'altra alternativa.

La politica della nostra azienda è che è OK (anche preferito) per Sistema di chiamata.exit(-1), ma solo in init() metodi.Mi sarebbe sicuramente pensare due volte prima di chiamare durante un programma normale flusso.

La generazione di eccezioni è il modo migliore per inviare informazioni su un determinato errore e fuori della app.

Un numero non dirvi quanto:

Exception at thread 'main': FileNotFoundException "The file 'foo' doesn't exist"

(o qualcosa di simile)

È visto di buon occhio per normale le uscite.Se "non tutto sta andando secondo i piani", quindi Sistema.l'uscita è bene.

Aggiornamento:Vorrei aggiungere che, presumo che il tuo '1" ha un significato che è documentato da qualche parte.

Penso che la generazione di un'eccezione è quello che si dovrebbe fare quando qualcosa va storto.In questo modo, se l'applicazione non è in esecuzione come applicazione stand-alone il chiamante è in grado di reagire e ha alcune informazioni su ciò che è andato storto.Inoltre, è più facile per scopi di debug, perché è così ottenere una migliore idea di ciò che è andato storto quando si vede una traccia dello stack.

Una cosa importante da notare è che quando l'eccezione raggiunge il livello superiore e, pertanto, provoca la VM per chiudere la macchina virtuale restituisce un codice di ritorno di 1, quindi al di fuori di applicazioni che utilizzano il codice di ritorno vedere che qualcosa è andato storto.

L'unico caso in cui penso di Sistema.exit() senso è quando l'app è pensata per essere chiamato da applicazioni che non sono Java e quindi usare i codici di ritorno per vedere se la vostra applicazione ha funzionato o non e volete quelle applicazioni per avere una possibilità di reagire in modo diverso su diverse cose vadano male, cioèavete bisogno di diversi codici di ritorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top