2010-04-19 21 views
122

Qual è il modo migliore per uscire da un'applicazione Java con il codice?Come uscire da un'app java dal programma

+1

Hmm. Penso che la domanda potrebbe essere troppo generale. Esci in quali circostanze? –

+3

Lascia che tutti i tuoi thread non daemon finiscano normalmente? –

+2

Solo per chiudere in genere – Olaseni

risposta

165

È possibile utilizzare System.exit() per questo scopo.

Secondo la documentazione Java 8 di Oracle:

public static void exit(int status)

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

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

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

Runtime.getRuntime().exit(n)

87
System.exit(0); 

Lo "0" lascia chiunque chiama il programma di sapere che tutto è andato bene. Se, tuttavia, si esce a causa di un errore, è necessario System.exit(1); o con un altro numero diverso da zero corrispondente all'errore specifico.

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

+0

ho pensato che fosse System.exit (1)? – AFK

+13

Come dice Chris, 'System.exit (1)' (o qualsiasi altro numero) è se si vuole indicare che è stato chiuso a causa di un errore. 'System.exit (0)' indica che il programma si è chiuso normalmente. Puoi anche modificare 1 in qualsiasi numero che ti piace, quindi quando esegui la tua applicazione da uno script puoi determinare se c'è stato un errore. – StormPooper

3

Sono d'accordo con Jon, fa reagire la tua applicazione a qualcosa e chiama System.exit().

Assicurarsi che:

  • si utilizza il valore di uscita appropriato. 0 è uscita normale, qualsiasi altra indicazione indica che si è verificato un errore
  • chiude tutti i flussi di input e output. I file, connessioni di rete, ecc
  • si accede o si stampa un motivo per uscire, soprattutto se la sua causa di un errore
5

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

Il modo normale di terminare un'applicazione è uscire dal metodo main(). Questo non funziona quando ci sono altri thread non-deamon in esecuzione, come avviene normalmente per le applicazioni con un'interfaccia utente grafica (AWT, Swing, ecc.). Per queste applicazioni, è possibile trovare un modo per terminare il loop degli eventi della GUI (non so se è possibile con AWT o Swing) o invocare System.exit().

10

System.exit(int i) deve essere utilizzato, ma vorrei includerlo all'interno di un shutdown() metodo più generico, in cui si desidera includere passi "pulizia" e, chiudendo le connessioni socket, descrittori di file, poi escono con System.exit(x).

1

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

3

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

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

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

Migliore: Runtime.getRuntime(). Halt (0); Ha funzionato perfettamente per me in Scala! –

+0

@GerhardHagerer ma cosa succede se si ottiene il runti non corrente, io? –

+0

Da Javadoc per 'halt':" Questo metodo deve essere usato con estrema cautela.A differenza del metodo 'exit', questo metodo non causa l'avvio di hook di shutdown e non esegue i finalizzatori non avviati se finalization-on-exit è stato abilitato.Se la sequenza di spegnimento è già stata avviata, questo metodo non attende l'esecuzione di hook o finalizzatori di spegnimento in esecuzione. " In breve, non dovresti aver bisogno di usare "halt", dovresti preferire "exit". –

-1

System.exit (ABORT); Esci immediatamente.

+0

Non esiste una variabile come ABORT. –

2

Ci sono due semplici risposte alla domanda.

Questo è il "modo professionale":

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

Si tratta di un modo più goffo:

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

'System.exit (0); return: 'è buono, il return impedisce l'esecuzione di qualsiasi codice ruther prima che il sistema possa uscire, altrimenti avresti bisogno di un flag (..' vale a dire (! called_exit) {ulteriore codice dopo l'exit statement} ' – ycomp

-1

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(); 
    } 
} 
-1

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