Sto scrivendo un programma applicativo utilizzando swing. Ho bisogno di uscire dall'applicazione facendo clic sul JButton
per quello posso usare System.exit()
o dovrei usare alcuni altri metodi, che è la migliore pratica. Se chiamare System.exit()
non è la procedura consigliata, indicare il motivo e indicare il modo alternativo di uscire dall'applicazione.System.exit (0) in java
risposta
Personnaly, io considero la procedura migliore per lasciare che l'applicazione si chiuda da sola: se si scrive una classe principale con un main(String[] args)
, con codice vuoto, l'esecuzione uscirà automaticamente dal programma Java.
Ma, nella maggior parte delle volte, come la maggior parte di sviluppatori, mi baso su System.exit(/an exit code/)
, soprattutto per le applicazioni Swing, in cui lo Swing EDT verrà eseguito senza fine, come ha scritto justkt .. La drawxback noto di questo metodo è che la maggior parte di codice applciation non viene chiamato, cosa evito impostando un hook di shutdown chiamando Runtime.addShutdownHook(Thread)
, che mi consentirà di pulire l'applicazione (chiudere i thread e così via).
Se è necessario impostare un codice di uscita per l'applicazione, è necessario utilizzare System.exit (credo).
Ma quando non hai bisogno di un codice specifico (o 0 va bene), allora preferirei che la JVM terminasse "naturalmente", cosa che accade quando non ci sono più (non daemon) thread rimasti.
Di solito, si raggiunge la fine del metodo principale.
Farei attenzione a System.exit perché potrebbero esserci altri thread che devono ancora fare qualcosa e uscire senza chiuderli correttamente potrebbe causare danni. Ad esempio il database incorporato potrebbe ancora aver bisogno di svuotare i suoi buffer.
Se si conoscono questi thread, di solito è possibile fare in modo che terminino correttamente. Se non sai quali thread sono in esecuzione nel tuo programma, hai problemi più grandi ...
Se il metodo principale genera un'eccezione, java genererà un altro codice di uscita (130, se lo ricordo correttamente). – whiskeysierra
System.exit può essere cattivo almeno quando hai più thread o risorse che devono essere chiuse correttamente (che vivono al di fuori di JVM). Se la tua applicazione non si sta esaurendo quando pensi che dovrebbe, dovresti scoprire qual è il problema e non chiamare semplicemente System.exit().
L'unico motivo per cui si chiama System.exit() potrebbe non fornire alcun codice di uscita standard.
In generale, l'unica volta che è necessario eseguire un System.exit (n) è se si desidera uscire da un programma della riga comandi con un codice di errore in modo che tutto ciò che sta monitorando il programma possa rilevare il codice di errore.
Questo è molto utile ad esempio, se si sta scrivendo un programma progettato per essere eseguito da uno script di shell.
Come altri repliche dire, però, se si utilizza le discussioni allora si deve fare ogni sforzo per farli chiudere con grazia prima di considerare uno System.exit (n)
In generale, chiamando System.exit(...)
ovunque, ma il "principale" il metodo di un'applicazione può essere problematico per (almeno) i seguenti motivi.
È un impedimento per riutilizzare il codice.
Rende difficile il test dell'unità.Ad esempio, se il tuo codice chiama
System.exit
quando i test JUnit esercitano una gestione degli errori, che è la fine della sequenza di test!
Il caso specifico di chiamare System.exit(...)
nel pulsante listener per il pulsante "uscita" non è poi così male. È improbabile che tu voglia riutilizzare il listener dei pulsanti da qualche parte che non richiede questo comportamento. Inoltre, probabilmente puoi trovare un modo per risolvere il problema dell'unità; per esempio. non testare unitamente quel particolare metodo!
Tuttavia, penso che proverei ancora ad ottenere l'uscita in modo diverso. Ad esempio, avere il metodo main
avviare tutto e quindi bloccare su CountDownLatch, quindi fare in modo che il listener dei pulsanti riduca il latch. Quando il metodo main
viene sbloccato, esegue il codice di arresto pertinente e restituisce o chiude come appropriato.
+1 per rendere difficile il test delle unità! "Perché i miei test unitari non sono completati ???" –
- 1. System.exit (0) vs JFrame.EXIT_ON_CLOSE
- 2. System.exit in Java Thread
- 3. Pratica di uscita (0) in C e System.exit (0) in Java
- 4. Differenza tra finish() e System.exit (0)
- 5. System.exit() in android
- 6. System.exit (0) non chiude tutte le mie attività?
- 7. System.exit in servlet
- 8. JFrame.dispose() vs System.exit()
- 9. Come acquisire l'evento System.exit?
- 10. Qual è lo scopo esatto di chiamare System.exit() in java
- 11. proibire la chiamata a System.exit
- 12. Java. System.exit (stato int). Valore per lo stato di uscita
- 13. Che cosa può far continuare a funzionare Java dopo System.exit()?
- 14. ignorare System.exit() da un'altra classe
- 15. differenza tra System.exit() e killProcess()
- 16. System.exit (0) non impedisce infine di essere chiamato quando un SecurityManager.checkExit genera un'eccezione
- 17. Perché (360/24)/60 = 0 ... in Java
- 18. Caratteri speciali \ 0 {NUL} in Java
- 19. È `1/0` un'espressione costante in Java?
- 20. Java int getto restituisce 0
- 21. Da quale thread deve essere chiamato System.exit() in un'app Swing?
- 22. C'è un modo per terminare un'applicazione java che usa java3d, senza chiamare System.exit()?
- 23. Perché Java consente array di dimensioni 0?
- 24. Lunghezza matrice Java inferiore a 0?
- 25. Spazio invece di condurre 0 Data Java
- 26. Utilizzo di request.getRemoteAddr() restituisce 0: 0: 0: 0: 0: 0: 0: 1
- 27. Qual è il significato di char zero (0) in Java?
- 28. È appropriato l'affermazione. if (0! = espressione o variabile) {} in java?
- 29. Come cambiare 0.xxxx a xxxx in Java
- 30. Perché PriorityQueue in Java non può avere initialCapacity 0?
L'uscita di un'applicazione da sola funziona per applicazioni non GUI, ma con Swing si ha la coda eventi e il thread eventi, di cui non si ha il controllo, che non si spegnerà senza alcun modulo (programmatico o facendo clic una 'x' su un JFrame) di intervento dell'utente. – justkt