Mi è stato detto e ho read che gli oggetti SWT devono essere eliminati esplicitamente chiamando il loro metodo dispose
. Tuttavia, nei miei test con il seguente codice, ho notato che almeno Shell
s si segnalano come disposti anche se il metodo di smaltimento non viene mai chiamato (né visualizzato) in nessun punto del mio codice.Devo disporre esplicitamente di casse SWT?
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.");
}
}
}
}
Così Shell ha davvero bisogno di essere esplicitamente smaltito? In tal caso, come fai a sapere quando smaltire una Shell e dove dovrebbe apparire il metodo di smaltimento?
Ottima risposta, grazie. – Buttons840