So usare System.exit (0) può terminare un programma java, ad esempio, se ho una finestra JFrame, chiuderà e termina il programma, ma mi chiedo quanti altri modi, può essere chiuso e il programma essere finito? Compreso quando si verifica un errore, il programma si spegnerà e il JFrame verrà chiuso?In quanti modi un programma java può finire?
risposta
Un altro modo in cui termina il programma Java è quando viene eseguita l'ultima istruzione nel codice java. Anche quando si verifica l'errore java.lang.OutOfMemory, il programma termina in modo anomalo. Ciò si verifica quando Java Virtual Machine non è in grado di allocare un oggetto perché ha esaurito la memoria e non è possibile rendere disponibile più memoria dal garbage collector.
Ho risposto alla tua domanda nel contesto delle GUI Swing in seguito alla tua segnalazione di JFrame
.
- Con una GUI Swing il thread di Invio eventi registra tutte le eccezioni che si verificano ma non risolvono l'applicazione in questa situazione.
- Analogamente, se un altro thread genera un'eccezione e termina il thread di Invio evento si assicura che l'applicazione sia mantenuta attiva (poiché non è un thread daemon).
- Un ultimo punto: se si desidera l'applicazione per essere terminato quando un JFrame è chiuso, è necessario chiamare:
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
In caso contrario, la cornice sarà semplicemente nascosto quando lo si chiude, ma l'applicazione continuerà correre.
Qui è tutto quello che posso pensare fuori della parte superiore della mia testa:
principale ritorna() (o un valore o un vuoto() principali finisce di eseguire la sua ultima affermazione)
programma genera un'eccezione non rilevata
System.exit (int)
Si può mandare in crash?
Nel tuo caso di una chiusura JFrame, credo che ci sarebbe stato un gestore onClose(), che sia chiama System.exit (0) o causa il metodo principale per tornare.
In riferimento a 1 .: Se sono in esecuzione thread non Demonemon, il programma continuerà a essere eseguito anche dopo che main() è ritornato. – jeremytrimble
JFrames hanno un metodo denominato 'setDefaultCloseOperation' che accetta una di queste costanti come argomento:' WindowConstants.HIDE_ON_CLOSE' (il valore predefinito), 'WindowConstants.DO_NOTHING_ON_CLOSE',' WindowConstants.DISPOSE_ON_CLOSE' e 'JFrame.EXIT_ON_CLOSE' – Powerlord
Si prega di avere un'occhiata a questa risposta riguardante la fine di main(): http://stackoverflow.com/questions/2070951/main-function-does-not-return-anything-why/2070968#2070968 –
Un programma Java termina quando termina l'ultimo thread senza daemon flag o quando si chiama un metodo che arresta la macchina virtuale (System.exit(), Runtime.exit(), Runtime.halt() e possibilmente un qualcuno di più).
Tutto il resto appartiene alle librerie che chiamano System.exit() (come ad esempio un JFrame con EXIT_ON_CLOSE).
Nit-picking, ma cosa succede se si registra un hook di chiusura che entra in un ciclo infinito quando viene eseguito? – Adamski
È possibile utilizzare anche Application.exit().
Piuttosto sicuro, 'Applicazione' è una classe di framework e non parte di JRE - potresti fornire il nome di classe completo? –
Per aggiungere ad altre risposte:
- Se il processo che ospita il VM è forza terminato, il programma sarà spontaneamente scomparire
- Lo stesso accade se il tappo viene tirato sulla macchina che ospita la VM :)
ROFL. +1 per quello – DVK
Non sto scherzando completamente :) Questo è in realtà uno scenario importante per un server che ha bisogno di fallire senza perdere dati. –
+1 è uno degli scenari peggiori. Se non fosse per quello, la maggior parte del software ad alta disponibilità potrebbe essere ** molto ** più veloce. –
È possibile terminare un programma Java in esecuzione esternamente. Uccidendo il processo java.exe dal task manager (in caso di finestre)
- 1. Quanti caratteri può contenere un StringBuilder Java?
- 2. Quanti modi diversi di invocare JS in un documento html?
- 3. Quanti caratteri può avere una stringa Java?
- 4. Quanti modi per convertire bitmap in stringa e viceversa?
- 5. Quanti dettagli hardware può rilevare una applet Java?
- 6. Quanti dati può salvare un browser in localStorage
- 7. Esecuzione di un programma java da un altro programma java
- 8. Scopri quanti millisecondi ha eseguito un programma C# nel debugger
- 9. eseguire un programma Java dal nostro programma Java
- 10. In quanti modi puoi affiancare un rettangolo 3xn con domino 2x1?
- 11. Calcolare quanti modi è possibile aggiungere tre numeri in modo che essi sono pari a 1.000
- 12. Quanti computer hanno installato Java?
- 13. Diversi modi per scrivere Singleton in Java
- 14. quanti dati può memorizzare un database SQL da 5 MB?
- 15. Quanti core cpu possono utilizzare un singolo processo Java?
- 16. In quanti modi puoi chiamare una subroutine e ignorare il suo prototipo in Perl?
- 17. Convertire un programma Java Console in Webapp
- 18. Initialcontext in un programma Java standalone
- 19. In quanti modi è possibile inserire una serie di valori in un BST per formare un albero specifico?
- 20. Quanti bit in un carattere?
- 21. In Lisp, quanti ingressi può avere effettivamente la funzione +?
- 22. Un programma può assegnare direttamente la memoria?
- 23. Finire un HttpServletResponse ma continuare l'elaborazione
- 24. Quali sono i vari modi con cui il "questo" può sfuggire in Java?
- 25. Quanti modi diversi possibili le persone possono essere seduti in una tavola rotonda?
- 26. Programma Java in esecuzione in background
- 27. Esecuzione di un programma Java in background in Tomcat
- 28. Quanti GB possono allocare malloc per il programma
- 29. Programma server multithread in Java
- 30. Esiste un programma che può aiutare a capire un altro programma?
Solo se main() è nullo. – bkritzer
Cosa significa? Cosa succede se l'ultima riga di codice eseguita da un dato thread (ad esempio all'interno di un Runnable) viene eseguita ma ci sono altri thread non daemon attivi? – Adamski
ya giusto, solo se main() è nullo. – Thunderhashy