Community
Participate
Working Groups
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:
PRODUCT VERSION: 2.0 007
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)
Fixed > 20050809