java - jDialog disposed but still in jFrame.getOwnedWindows -


मेरे पास एक JFrame (EC_GUI.main) है और फिर मैं कई JDialog < / Code> s जिसके लिए मैं जेपीनल जोड़ता हूं, JFrame को स्वामी के रूप में पास कर रहा हूं।

मैं इनमें से कोई भी पता लगाने की प्रक्रिया में हूं JDialogs को jFrame.getOwnedWindows () के माध्यम से खोला जाता है, क्योंकि मैं उन्हें इनमें से किसी एक के माध्यम से नहीं प्राप्त कर सकता

  EC_GUI.main getComponentCount () 1 javax.swing.JRootPane [, 0,0,755x1005, लेआउट = javax.swing.JRootPane $ RootLayout, alignmentX = 0.0, alignmentY = 0.0, border =, झंडे = 16,777,673, maximumSize =, minimumSize =, preferredSize =] EC_GUI.main.getRootPane ()। getComponentCount () 2 javax.swing.JPanel [null.glassPane, 0,0,755x1005, छिपे हुए, लेआउट = java.awt.FlowLayout, alignmentX = 0.0, alignmentY = 0.0, border =, झंडे = 16777217, maximumSize =, minimumSize =, preferredSize =] javax.swing.JLayeredPane [null.layeredPane, 0,0,755x1005, alignmentX = 0.0, alignmentY = 0.0, border =, झंडे = 0, maximumSize =, minimumSize =, preferredSize =, OptimizedDrawingPossible = true] EC_GUI.main.getContentPane ()। GetComponentCount () 1 ec.gui.dialogs.template.EC_BorderPanel [, 0,0,755x1005, लेआउट = java.awt.BorderLayout, alignmentX = 0.0, alignmentY = 0.0, सीमा = javax.swing.border.EmptyBorder @ 44e6097c, झंडे = 9, अधिकतम साइज =, न्यूनतम साइज़ =, पसंदीदासिज़्म =]  

लेकिन अगर मैं स्वामित्व वाली विंडों < / code>

  EC_GUI.main.getOwnedWindows ()। लंबाई 1 ec.gui.dialogs.visivilityfield.EC_VrPresetDialog $ 1 [dialog0,385,254,502x511, अवैध, छिपे हुए, लेआउट = java.awt.BorderLayout , मोडहीन, title = आभासी वास्तविकता प्रीसेट, defaultCloseOperation = DO_NOTHING_ON_CLOSE, rootPane = javax.swing.JRootPane [, 0,0,502x511, अवैध, लेआउट = javax.swing.JRootPane $ RootLayout, alignmentX = 0.0, alignmentY = 0.0, border =, झंडे = 16777673, अधिकतम साइज =, न्यूनतम साइज़ =, पसंदीदा सिज़न =], रूटपैन जांचना सक्षम = सच]  

मैंने देखा कि भले ही मैं jDialog.dispose () को कॉल करता हूं I एक संदर्भ है, इसलिए यदि मैं खोलता हूं और बंद करता हूं, तो मान लीजिए कि 3 गुना, मेरे में से एक JDialog रों, मैं

  EC_GUI.main.getOwnedWindows ()। लंबाई 3 $ 1 ec.gui.dialogs.visivilityfield.EC_VrPresetDialog [dialog1,385,254,502x511, अवैध, छिपा, लेआउट = java.awt.BorderLayout, मोडहीन, title = आभासी वास्तविकता प्रीसेट, defaultCloseOperation = DO_NOTHING_ON_CLOSE, rootPane = javax.swing.JRootPane [, 0,0,502x511, अवैध, लेआउट = javax.swing.JRootPane $ RootLayout, alignmentX = 0.0, alignmentY = 0.0, border =, झंडे = 16,777,673, maximumSize =, minimumSize =, preferredSize =], rootPaneCheckingEnabled = true] ec.gui.dialogs.visivilityfield.EC_VrPresetDialog $ 1 [dialog2,385,254,502x511, अवैध, छिपे हुए, लेआउट = जावा .awt.BorderLayout, मोडहीन, title = आभासी वास्तविकता प्रीसेट, defaultCloseOperation = DO_NOTHING_ON_CLOSE, rootPane = javax.swing.JRootPane [, 0,0,502x511, अवैध, लेआउट = javax.swing.JRootPane $ RootLayout, alignmentX = 0.0, alignmentY = 0.0 , border =, झंडे = 16777673, maximumSize =, minimumSize =, preferredSize =], rootPaneCheckingEnabled = true] ec.gui.dialogs.visivilityfield.EC_VrPresetDialog $ 1 [dialog3,385,254,502x511, invali घ, छिपे हुए, लेआउट = java.awt.BorderLayout, मोडहीन, title = आभासी वास्तविकता प्रीसेट, defaultCloseOperation = DO_NOTHING_ON_CLOSE, rootPane = javax.swing.JRootPane [, 0,0,502x511, अवैध, लेआउट = javax.swing.JRootPane $ RootLayout,  

क्या यह सामान्य है?

आपने पढ़ा है कि आप ऐसा नहीं करेंगे, जब सही ढंग से कॉन्फ़िगर किया जाता है, विच्छेदन देशी संसाधनों को रिलीज कर देगा जो खिड़की का प्रयोग कर रही है, यह करता है ऑब्जेक्ट का "विस्थापन" न करें, आप सेट विवेबल कॉल करके विंडो को फिर से दिखा सकते हैं।

आप isDisplayable की जांच कर सकते हैं (जो आपको बताएगा कि खिड़की के पास अभी भी उसके मूल पीअर का संदर्भ है) या अधिक विश्वसनीय isisible विकल्प ...

यदि संवाद में कोई अन्य मजबूत संदर्भ नहीं है, तो यह अंततः कचरा एकत्र किया जाएगा।


Comments