Ho creato una finestra di dialogo con un jpanel al suo interno e quel jpanel sarà ancora referenziato se mi sbarazzerò della finestra di dialogo. Voglio distruggere quella finestra di dialogo e tutto ciò che contiene quando faccio clic su un pulsante Annulla. Come posso cancellare sia la finestra di dialogo che la jpanel?Come si elimina un oggetto referenziato da una finestra di dialogo?
risposta
Rispondendo alla domanda (s) è posta nel comment:.
Una volta visualizzata una finestra di dialogo:
setVisible(true);
si nasconde chiamando:
setVisible(false);
e quindi è necessario chiamare:
dialog.dispose();
per assicurarsi che tutte le risorse GUI native la finestra di dialogo usata viene liberata. Una volta fatto questo, il garbage collector pulirà tutti gli oggetti quando non avrai più riferimenti.
Non è necessario eliminare l'oggetto. Il garbage collector si prenderà cura della memoria non appena non sarà più referenziata.
ma creo una finestra di dialogo con jpanel al suo interno e quel jpanel sarà ancora referenziato. Voglio distruggere quella finestra di dialogo quando clicco sul mio pulsante "Annulla" – joseph
Quindi puoi impostarlo su null – RubyDubee
@joseph: Rimuovi il 'JPanel' dalla finestra di dialogo quando lo chiudi, se hai intenzione di mantenere un riferimento al 'JPanel'. Ciò impedirà a 'JPanel' di mantenere un riferimento al dialogo e di mantenerlo (il dialogo) in giro. –
Intendevi "come" distruggerlo? Non c'è modo di distruggere un oggetto esplicitamente in Java. Garbage Collector in Java recupera automaticamente la memoria occupata da esso Se non esiste alcun riferimento dello stesso esiste.
", ma creo dialogo con JPanel al suo interno, e che JPanel sarà ancora referrenced. Io voglio distruggere che dialogo, quando clicca il mio tasto 'Cancel'
Basta provare impostazione che oggetto JPanel a NULL o chiamare il metodo Dispose su di essa se questo è disponibile
Se si desidera eliminare assegnare il riferimento oggetto a null, in modo che quando Garbage Collector viene eseguito per la volta successiva, può distruggere l'oggetto pensando che non venga referenziato.
È possibile sovrascrivere il metodo finalize() (vedere http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#finalize%28%29) per eseguire la pulitura quando un oggetto viene distrutto.
Tuttavia, a differenza del C++ non è garantito quando verrà chiamato questo metodo. In C++ hai oggetti memorizzati nello stack che vengono distrutti quando l'esecuzione lascia l'ambito in cui sono stati definiti.
In Java tutti gli oggetti sono memorizzati nell'heap. Saranno finalizzati quando il Garbage Collector decide di raccoglierli (implica che non sono raggiungibili dalla tua app) ma non sai quando il GC prenderà il via. Quindi, se hai qualche ripulitura che deve aver luogo ad un certo punto (ad esempio, chiudendo un file in modo che possa essere scritto) devi codificarlo da solo e non fare affidamento sul metodo finalize().
Il modello tipico per fare che si basa su un blocco try ... finally
:
X x = null;
try {
// ... do some stuff
x = ... // obtain an object
... // do some stuff
}
finally {
if(x != null)
x.close(); // Perform cleanup WRT x
}
(Certo, brutto)
Non c'è bisogno di distruggere oggetti in Java nel modo come in C++.C'è un garbage collector che distrugge (rilascia memoria utilizzata da) oggetti automaticamente dopo che non ci sono riferimenti a questo oggetto nel codice in esecuzione. Tutto ciò che puoi fare è forzare la distruzione del collegamento tramite Object obj = null;
Questo uccide il riferimento a obj.
Se si tratta di una finestra e se è visibile
I. frame.setVisible (false);
II. frame.dispose();
II. riferimento impostato su null (es .. frame = null;)
Se non è una finestra di riferimento
I.set su null (es .. x = null;)
Questo è tutto, una volta che l'oggetto è libero GC libererà le risorse quando è come.
Ecco quarantina è necessario comprendere
*. Tu come programmatore Java non puoi forzare la Garbage collection in Java; si attiverà solo se JVM ritiene di aver bisogno di una garbage collection basata sulla dimensione heap Java.
*. Esistono metodi come System.gc() e Runtime.gc() che viene utilizzato per inviare la richiesta di Garbage Collection a JVM ma non è garantito che si verifichi la garbage collection.
*. Se non c'è spazio di memoria per la creazione di nuovo oggetto in Heap Java Virtual Machine getta OutOfMemoryError o java.lang.OutOfMemoryError mucchio spazio
E la ricerca su questo ...
J2SE 5 (Java 2 Standard Edition) aggiunge una nuova funzionalità chiamata Ergonomia. L'obiettivo dell'ergonomia è quello di fornire buone prestazioni dalla JVM con il minimo di messa a punto della linea di comando.
"System.gc()" è il modo migliore.
gc-Garbage Collector.
Questo è come si sta andando distruggere l'oggetto nel programma stesso
codice di esempio:
public class TestRun
{
public static void main(String args[])
{
/*1*/ TestRun tr=new TestRun();
/*2*/ System.gc(); //You can omit this step. This is just an example.
/*3*/ tr=null;
/*4*/ System.gc();
}
}
Spiegazione
un oggetto della classe TestRun è creato e il suo riferimento è memorizzato nella variabile 'tr'.
Viene chiamato il garbage collector. Ma non ha alcun effetto. Perché nessun oggetto è ancora dereferenziato.
L'oggetto creato nel passaggio 1 è ora dereferenziato.Ma lo spazio che era occupato dall'oggetto è ancora bloccato da esso.
Viene nuovamente richiamato Garbage Collector e ora vede che l'oggetto creato nel passaggio 1 è ora dereferenziato. Quindi, ora libera lo spazio occupato dall'oggetto e l'oggetto viene ora cancellato dalla memoria in un linguaggio semplice.
Infatti eliminerà tutti quegli oggetti che sono già dereferenziati.
È buona prassi continuare a chiamarlo nel codice.
- 1. Come ottenere i dati da una finestra di dialogo personalizzata
- 2. Come si usa una finestra di dialogo jQueryUI per conferma?
- 3. Come creare una finestra di dialogo JavaFX?
- 4. C# Interop di Excel - Elimina la finestra di dialogo "Pubblicazione" quando si richiama Worksheet.ExportAsFixedFormat
- 5. Come si elimina un database da Firebase?
- 6. Icone in una finestra di dialogo Elenco
- 7. Come posso integrare Django con una finestra di dialogo JqueryUI?
- 8. Come spostare una finestra di dialogo Winform
- 9. Come si elimina una tabella da un mysqldump
- 10. Come si attiva un evento quando il clic si verifica all'esterno di una finestra di dialogo
- 11. Android: come creare una finestra di dialogo senza un titolo?
- 12. gtk visualizzazione di una finestra di dialogo all'interno di una finestra di dialogo
- 13. Finestra di dialogo come finestra principale?
- 14. jquery ui finestra di dialogo si apre solo una volta
- 15. Animazione di una finestra di dialogo personalizzata
- 16. jQuery finestra di dialogo modale e finestra di dialogo CKEditor
- 17. Mostra una finestra di dialogo in `Thread.setDefaultUncaughtExceptionHandler`
- 18. JQGrid all'interno di una finestra di dialogo
- 19. come impostare un testo in un Edittext che si trova in una finestra di dialogo?
- 20. come programmare a tema un'attività come una finestra di dialogo?
- 21. Come passare i dati da un frammento a una finestra di dialogo Frammento
- 22. Come si visualizza un UserControl personalizzato come una finestra di dialogo?
- 23. Come gestire una finestra di dialogo per confermare la webview?
- 24. Apertura della finestra di dialogo "Salva come ..." da: ex comando
- 25. Come si elimina un database di template da PostgreSQL?
- 26. Finestra di dialogo modale da una finestra di dialogo modale - entrambi chiudono quando il secondo è chiuso - perché?
- 27. Come creare una finestra di dialogo modale in WPF?
- 28. Aggiunta di un frammento a una finestra di dialogo
- 29. Come si elimina un singolo file da un archivio tar.gz
- 30. Personalizza finestra di dialogo onbeforeunload
MyClass o = new Myclass(); o = null; – gpampara