2012-11-13 9 views
26

Qual è la differenza tra questi due metodi: System.exit() e JFrame.dispose()?JFrame.dispose() vs System.exit()

Se vogliamo chiudere un'applicazione Java Swing quando si fa clic su un pulsante, quale metodo dovrei usare?

+0

su pulsante clic. riguarda JButton standalone con System.exit (0) o da pulsante in JFrames ToolBar – mKorbel

+0

@mKorbel: prima opzione – Adil

risposta

46

System.exit(); causa la terminazione completa della VM Java.

JFrame.dispose(); causa la distruzione e la pulizia della finestra dal sistema operativo. Secondo lo documentation, questo può causare la terminazione della Java VM se non ci sono altri Windows disponibili, ma questo dovrebbe essere visto come un effetto collaterale piuttosto che come la norma.

Quello che scegli dipende davvero dalla tua situazione. Se si desidera terminare tutto nella Java VM corrente, è necessario utilizzare System.exit() e tutto verrà pulito. Se si desidera solo distruggere la finestra corrente, con l'effetto collaterale che chiuderà la Java VM se questa è l'unica finestra, utilizzare JFrame.dispose().

+0

Il problema che vedo con System.exit è che uccide davvero l'applicazione, anche se un thread è, ad esempio, la scrittura un file. Mi sembra che la maggior parte delle applicazioni chiudano la finestra, piuttosto che attendere il completamento dei thread. Ma poiché i thread AWT potrebbero non essere completati, abbiamo un problema su come implementarlo correttamente in Java. –

10

JFrame.dispose()

public void dispose() 

Rilascia tutte le risorse nativa dello schermo utilizzate da questa finestra, le sue sottocomponenti, e tutti i suoi figli di proprietà. Cioè, le risorse per questi componenti verranno distrutte, qualsiasi memoria che consumeranno verrà restituita al sistema operativo e saranno contrassegnate come non visualizzabili. La Finestra e i relativi sottocomponenti possono essere resi nuovamente visualizzabili ricostruendo le risorse native con una chiamata successiva da impacchettare o mostrare. Gli stati della Finestra ricreata e dei suoi sottocomponenti saranno identici agli stati di questi oggetti nel punto in cui la Finestra è stata eliminata (non tenendo conto di ulteriori modifiche tra quelle azioni).

Nota: Quando l'ultima finestra visualizzabile all'interno della Java virtual machine (VM) viene eliminata, la macchina virtuale può terminare. Vedi Problemi di thread AWT per ulteriori informazioni.

System.exit()

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 class Runtime. Questo metodo non ritorna mai normalmente.

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

Runtime.getRuntime().exit(n) 
5

In aggiunta a quanto sopra si può usare il System.exit() per restituire un codice di uscita che può essere molto usuefull specialmente se il vostro chiamando il processo automaticamente utilizzando il System.exit(code); questo può aiutare a determinare ad esempio se si è verificato un errore durante la corsa.

3
  • Se si dispone di più finestre aperte e solo desidera chiudere quello che è stato l'uso chiusa JFrame.dispose().

  • Se si desidera chiudere tutte le finestre e terminare utilizzare l'applicazione System.exit()

Problemi correlati