|
|
Check for isDisposed() in dispose after
sending Dispose Calback (1GLC25X) |
Bug List: First Last (This bug is
not in your list) Show list
Query page
Enter new bug
Run the following example, click on the button and you get the SWT Exception wdiget is disposed.
See Stack trace below.
In the dispose method of a widget, we need to check that the widget has not been disposed in the Dispose callback.
public static void main(String args[]){
Display display = new Display ();
Shell shell = new Shell();
shell.setLayout(new org.eclipse.swt.layout.GridLayout());
shell.setBounds(100,30, 800,600);
shell.open();
final Composite panel = new Composite(shell, SWT.BORDER);
panel.setBounds(20,430,100,100);
final Button button = new Button(panel, 0);
button.setText("dispose button");
button.setBounds(7,7,80,70);
final SelectionAdapter[] selectionListener = new SelectionAdapter[1];
selectionListener[0] = new SelectionAdapter(){
public void widgetSelected (org.eclipse.swt.events.SelectionEvent e){
button.dispose();
}
};
button.addSelectionListener(selectionListener[0]);
final DisposeListener[] disposeListener = new DisposeListener[1];
disposeListener[0] = new DisposeListener(){
public void widgetDisposed(org.eclipse.swt.events.DisposeEvent e){
button.removeDisposeListener(disposeListener[0]);
panel.dispose();
}
};
button.addDisposeListener(disposeListener[0]);
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
}
org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:1818)
at org.eclipse.swt.SWT.error(SWT.java:1750)
at org.eclipse.swt.widgets.Widget.error(Widget.java:379)
at org.eclipse.swt.widgets.Control.getDisplay(Control.java:597)
at org.eclipse.swt.widgets.Control.unsubclass(Control.java:2365)
at org.eclipse.swt.widgets.Control.releaseWidget(Control.java:1247)
at org.eclipse.swt.widgets.Button.releaseWidget(Button.java:344)
at org.eclipse.swt.widgets.Widget.dispose(Widget.java:366)
at veronika._Scrapbook$1.widgetSelected(_Scrapbook.java:43)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:85)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:54)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:645)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:1359)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1160)
at veronika._Scrapbook.main(_Scrapbook.java:58)
Exception in thread "main"
NOTES:
------- Additional Comment #1 From
DJ Houghton 2001-10-29 16:44 -------
PRODUCT VERSION:
2.0 007
------- Additional Comment #2 From
Veronika Irvine 2004-09-24 10:09
------- In 3.1, I get a different error now on Windows:
java.lang.NullPointerException
at org.eclipse.swt.widgets.Control.deregister(Control.java:498)
at org.eclipse.swt.widgets.Control.releaseWidget(Control.java:1496)
at org.eclipse.swt.widgets.Button.releaseWidget(Button.java:364)
at org.eclipse.swt.widgets.Widget.dispose(Widget.java:368)
at veronika.Newsgroup$1.widgetSelected(Newsgroup.java:25)
at org.eclipse.swt.widgets.TypedListener.handleEvent
(TypedListener.java:89)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2783)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2442)
at veronika.Newsgroup.main(Newsgroup.java:40)
Bug List: First Last (This bug is
not in your list) Show list
Query page
Enter new bug
This is Bugzilla: the Mozilla bug system. For more
information about what Bugzilla is and what it can do, see bugzilla.org.
| |