मुझे बताया गया है और read है कि SWT ऑब्जेक्ट्स को dispose
विधि को कॉल करके स्पष्ट रूप से निपटाया जाना चाहिए। हालांकि, निम्नलिखित कोड के साथ अपने स्वयं के परीक्षण में, मैंने ध्यान दिया है कि कम से कम Shell
एस स्वयं को निपटाने के रूप में रिपोर्ट करता है भले ही निपटान विधि को कभी भी मेरे कोड में कभी भी नहीं कहा जाता (न ही प्रकट होता है)।क्या मुझे स्पष्ट रूप से एसडब्ल्यूटी शैल का निपटान करने की आवश्यकता है?
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Test {
private static int numDisposals = 0;
private static List<Shell> shells = new ArrayList<Shell>();
public static void main(String[] args) {
Display d = Display.getDefault();
for (int i = 0; i < 3; i++) {
Shell s = new Shell(d);
shells.add(s);
s.setText(String.valueOf(i));
s.open();
s.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent notUsed) {
numDisposals++;
printShellStatus();
}
});
}
while (numDisposals < 3) {
while (!d.readAndDispatch()) {
d.sleep();
}
}
printShellStatus();
}
public static void printShellStatus() {
System.out.println("Which shells are disposed?");
for (Shell shell : shells) {
if (shell.isDisposed()) {
System.out.println("I am disposed.");
} else if (!shell.isDisposed()) {
System.out.println("I am NOT disposed.");
}
}
}
}
तो शैल को वास्तव में स्पष्ट रूप से निपटान करने की आवश्यकता है? यदि हां, तो आप कैसे जानते हैं कि शेल का निपटान कब किया जाए, और निपटान विधि कहां दिखाई देनी चाहिए?
ग्रेट उत्तर, धन्यवाद। – Buttons840