我被告知并且有read必须通过调用它们的dispose
方法明确处置SWT对象。然而,在我用下面的代码进行的测试中,我注意到至少有Shell
报告自己被处置,尽管在我的代码中任何地方都不会调用dispose方法(也不会出现)。我是否需要明确处理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.");
}
}
}
}
因此,壳真的需要明确处置?如果是这样,你怎么知道什么时候处理一个Shell,处理方法出现在哪里?
很好的答案,谢谢。 – Buttons840 2012-01-12 21:51:25