我創建了一個對話框,裏面有一個jpanel,如果我擺脫了對話框,jpanel仍然會被引用。當我點擊一個取消按鈕時,我想銷燬該對話框及其中的所有內容。如何刪除對話框和jpanel?如何刪除對話框引用的對象?
回答
回答這個問題()你在comment提出:
一旦你顯示一個對話框:通過調用
setVisible(true);
你隱藏:
setVisible(false);
,然後你必須調用:
dialog.dispose();
,以確保所有本地的GUI資源使用的對話框被釋放。完成此操作後,垃圾收集器將在您不再引用任何對象時清除所有對象。
你的意思是「如何」摧毀它?沒有辦法在Java中明確銷燬對象。 Java中的垃圾回收器自動回收它佔用的內存如果沒有引用相同的存在。
「但我創建的JPanel 對話框裏面,這JPanel的將是 仍然referrenced。我要摧毀 該對話框時,單擊我自己的按鈕 ‘取消’
試試看設置,JPanel的對象爲空或調用Dispose方法就可以了,如果可用
如果要刪除將該對象引用分配給null,以便垃圾收集器在下次運行時可以銷燬該對象,因爲它認爲它沒有被引用。
您可以覆蓋finalize()方法(請參見http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#finalize%28%29)以在對象被銷燬時執行清理。
但是,與C++不同,不能保證何時調用此方法。在C++中,你有堆棧存儲的對象,這些對象在執行離開它們定義的範圍時被銷燬。
在Java中,所有對象都存儲在堆中。垃圾收集器決定收集它們時(意味着它們無法從您的應用程序訪問),但它們會在GC啓動時不知道。因此,如果您有必須在某個特定時間進行清理(例如,關閉文件以便寫入文件),則必須自己對其進行編碼,而不要依賴於調用的finalize()方法。
用於這樣做的典型模式是基於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
}
(誠然,難看)
沒有必要在C銷燬對象在Java中的方式類似++。垃圾回收器在運行代碼中沒有對該對象的引用後會自動銷燬(釋放內存使用的內存)。你所能做的所有事情是強制銷燬鏈接Object obj = null;
這會殺死對obj的引用。
如果它是一個窗口,如果它是可見
一frame.setVisible(假);
二, frame.dispose();
二,設定的基準爲空(例如..幀= NULL;)
如果它不是一個窗口
I.set參考爲空(例如.. X = NULL;)
就是這樣,一旦對象被釋放,GC就會像那樣釋放資源。
這裏有些事情您必須瞭解
*。您作爲Java程序員無法在Java中強制垃圾收集;只有JVM認爲它需要基於Java堆大小的垃圾回收時纔會觸發它。
*。有類似System.gc()和Runtime.gc()這是用來發送垃圾收集請求到JVM,但不保證垃圾收集將發生。
*。如果在堆Java虛擬機創建新的對象沒有記憶空間拋出的OutOfMemoryError或java.lang.OutOfMemoryError堆空間
和搜索這個...
J2SE 5(Java 2標準版)增加了一個新功能稱爲人體工程學。人機工程學的目標是以最少的命令行調整從JVM提供良好的性能。
「System.gc()」是最好的方法。
gc-Garbage Collector。
這是你如何會破壞該計劃的對象本身
示例代碼:
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();
}
}
說明
類TestRun的目的是創建和它引用存儲在變量'tr'中。
垃圾收集器被調用。但不起作用。因爲還沒有對象被解除引用。
在步驟1中創建的對象現在已解除引用。但被物體佔據的空間仍然被它阻擋。
垃圾收集器再次被調用,現在它看到在步驟1中創建的對象現在被解除引用。因此,現在它釋放了對象所佔用的空間,並且該對象現在以簡單的語言從內存中刪除。
事實上,它會刪除所有已經解除引用的對象。
在代碼中繼續調用它是一個好習慣。
- 1. 的Android空對象引用對話框
- 2. 如何刪除對話框中的行?
- 3. 如何刪除從其他對象引用的對象?
- 4. 對象刪除引用自
- 5. Android:如何正確刪除對話框
- 6. 休眠 - 刪除對象引用而不刪除對象
- 7. WPF Documentviewerbase.Print。刪除對話框
- 8. C#NHibernate - 刪除所有對刪除對象的引用
- 9. 如何刪除jQuery的對話框的標題上一個動態對話框
- 10. Android對話框,刪除薄灰色邊框(〜2px)sorrounding對話框
- 11. 如何解除對話框?
- 12. Android:如何將對象從對話框傳遞到對話框
- 13. 如果其他對象引用它,則拒絕刪除對象
- 14. 刪除嵌套的對象引用mongoose
- 15. 如何刪除已解除引用的對象?
- 16. 只用對象的引用從數組中刪除對象
- 17. 使用確認對話框刪除ActionLink
- 18. 使用FancyBox刪除確認對話框
- 19. AngularJS - 使用對話框刪除項目
- 20. python + SQLAlchemy:用會話對象刪除
- 21. jQuery對話框打開2個對話框並刪除元素
- 22. 如何從對話框窗口中隱藏/刪除所有對話框按鈕
- 23. 如何解除編碼爲對話框活動的對話框?
- 24. 如何刪除Excel.Name對象?
- 25. 如何刪除此對象?
- 26. 如何刪除QML對象
- 27. 如何刪除對象?
- 28. 如何刪除對象?
- 29. 如何刪除對象?
- 30. 如何刪除google.maps.Polyline對象?
MyClass o = new Myclass(); o = null; – gpampara 2010-03-15 08:10:29