Come uscire da un'app Java all'interno del programma


145

Qual è il modo migliore per uscire da un'applicazione Java con codice?


1
Hmm. Penso che la domanda potrebbe essere troppo generica. Uscire in quali circostanze?
Allen George,

3
Consenti a tutti i thread non daemon di finire normalmente?
Thorbjørn Ravn Andersen,

Risposte:


192

Puoi usare System.exit() per questo scopo.

Secondo la documentazione Java 8 di Oracle:

public static void exit(int status)

Termina la Java Virtual Machine attualmente in esecuzione. L'argomento funge da codice di stato; per convenzione, un codice di stato diverso da zero indica una chiusura anomala .

Questo metodo chiama il metodo exit nella classe Runtime. Questo metodo non ritorna mai normalmente.

La chiamata System.exit(n)è effettivamente equivalente alla chiamata:

Runtime.getRuntime().exit(n)


102
System.exit(0);

Lo "0" fa sapere a chiunque abbia chiamato il tuo programma che tutto è andato bene. Se, tuttavia, si sta chiudendo a causa di un errore, è necessarioSystem.exit(1); o con un altro numero diverso da zero corrispondente all'errore specifico.

Inoltre, come altri hanno già detto, pulisci prima! Ciò comporta la chiusura di file e altre risorse aperte.


Ho pensato che fosse System.exit (1)?
AFK,

14
Come afferma Chris, System.exit(1)(o qualsiasi altro numero) è se si desidera indicare che è stato chiuso a causa di un errore. System.exit(0)indica che il programma si è chiuso normalmente. Puoi anche cambiare 1 con qualsiasi numero che ti piace, quindi quando esegui la tua applicazione da uno script puoi determinare se si è verificato un errore.
StormPooper

10

System.exit(int i)deve essere usato, ma lo includerei in un shutdown()metodo più generico , in cui includeresti anche i passaggi di "pulizia", ​​chiudendo le connessioni socket, i descrittori di file, quindi uscendo con System.exit(x).


6

System.exit() di solito non è il modo migliore, ma dipende dalla tua applicazione.

Il solito modo di terminare un'applicazione è uscire dal main()metodo. Questo non funziona quando sono in esecuzione altri thread non Deamon, come di consueto per le applicazioni con un'interfaccia utente grafica (AWT, Swing ecc.). Per queste applicazioni, puoi trovare un modo per terminare il ciclo degli eventi della GUI (non sai se ciò è possibile con AWT o Swing) o invocare System.exit().


4

utilizzando dispose(); è un modo molto efficace per chiudere i programmi.

Ho scoperto che l'utilizzo System.exit(x)reimposta il riquadro delle interazioni e supponiamo che abbiate bisogno di alcune delle informazioni lì scompare.


3

Sono d'accordo con Jon, fai in modo che la tua applicazione reagisca a qualcosa e chiama System.exit ().

Assicurati che:

  • si utilizza il valore di uscita appropriato. 0 è uscita normale, qualsiasi altra cosa indica che si è verificato un errore
  • chiudi tutti i flussi di input e output. File, connessioni di rete, ecc.
  • si registra o si stampa un motivo per uscire soprattutto se è a causa di un errore

2

La risposta è System.exit (), ma non è una buona cosa da fare in quanto interrompe il programma. Qualsiasi ripulitura, distruzione che intendi fare non accadrà.


1

Ci sono due semplici risposte alla domanda.

Questo è il "modo professionale":

//This just terminates the program.
System.exit(0);

Questo è un modo più goffo:

//This just terminates the program, just like System.exit(0).
return;

System.exit(0); return;è anche buono, il ritorno impedisce l'esecuzione di qualsiasi codice ruther prima che il sistema possa uscire, altrimenti avresti bisogno di un flag (..i.e. if (!called_exit) { further code after exit statement }
ycomp

-1
Runtime.getCurrentRumtime().halt(0);

1
Migliore: Runtime.getRuntime (). Halt (0); Ha funzionato perfettamente per me all'interno di Scala!
Gerhard Hagerer,

@ GerhardHagerer ma cosa succede se ottieni la runti non attuale, io?
Amico fratello,

1
Da Javadoc per halt: "Questo metodo dovrebbe essere usato con estrema cautela. A differenza del exitmetodo, questo metodo non provoca l'avvio di hook di arresto e non esegue finalizzatori non invocati se la finalizzazione all'uscita è stata abilitata. Se la sequenza di spegnimento ha già avviato, questo metodo non attende che ganci di arresto o finalizzatori in esecuzione finiscano il loro lavoro. " In breve, non dovresti usare halt, dovresti preferire exit.
Erwin Bolwidt,

-1

System.exit()farà quello che vuoi. Ma nella maggior parte dei casi, probabilmente vuoi uscire da un thread e lasciare in vita il thread principale. In questo modo, è possibile terminare un'attività, ma mantenere anche la possibilità di avviare un'altra attività senza riavviare l'app.



-3

Questo dovrebbe farlo nel modo corretto:

mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {

@Override
public void windowClosing(WindowEvent e) {
    if (doQuestion("Really want to exit?")) {
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.dispose();
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.