You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Stefan Egli (JIRA)" <ji...@apache.org> on 2014/07/09 13:29:04 UTC

[jira] [Resolved] (SLING-3753) Avoid 'Widget is disposed' errors

     [ https://issues.apache.org/jira/browse/SLING-3753?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stefan Egli resolved SLING-3753.
--------------------------------

    Resolution: Fixed

Fixed.

The root cause was in the way eclipse handles the elementMap in the CommonViewer/TreeViewer: upon a structural change, it figured the node was no longer equal and disposed the element - while still keeping it in the elementMap for some reason. This discrepancy later turned into the 'Widget is disposed' exception when the changed node was expanded for example.

To avoid this, the tree elements (ie the JcrNode) now are regarded as 'equals (same hashCode)' as long as the node itself is equal, irrespective of the children.

This way, we're no longer running into what I consider a bug with the elementMap.

> Avoid 'Widget is disposed' errors
> ---------------------------------
>
>                 Key: SLING-3753
>                 URL: https://issues.apache.org/jira/browse/SLING-3753
>             Project: Sling
>          Issue Type: Bug
>          Components: IDE
>    Affects Versions: Sling Eclipse IDE 1.0.0
>            Reporter: Stefan Egli
>            Assignee: Stefan Egli
>             Fix For: Sling Eclipse IDE 1.0.2
>
>
> In the Project Explorer, when fiddling around with the content browser by eg copy/pasting, drag-dropping, changing node types etc, it sometimes can occur, that when selecting a (jcr) node, an error box saying "Widget is disposed" shows up.
> Below is the full stacktrace for reference:
> {code}
> org.eclipse.swt.SWTException: Widget is disposed
> 	at org.eclipse.swt.SWT.error(SWT.java:4397)
> 	at org.eclipse.swt.SWT.error(SWT.java:4312)
> 	at org.eclipse.swt.SWT.error(SWT.java:4283)
> 	at org.eclipse.swt.widgets.Widget.error(Widget.java:783)
> 	at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:573)
> 	at org.eclipse.swt.widgets.Widget.getData(Widget.java:845)
> 	at org.eclipse.jface.viewers.AbstractTreeViewer.associate(AbstractTreeViewer.java:712)
> 	at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:1022)
> 	at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:485)
> 	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> 	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
> 	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
> 	at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2167)
> 	at org.eclipse.jface.viewers.StructuredViewer.internalUpdate(StructuredViewer.java:2150)
> 	at org.eclipse.jface.viewers.StructuredViewer.update(StructuredViewer.java:2089)
> 	at org.eclipse.jface.viewers.ColumnViewer.update(ColumnViewer.java:561)
> 	at org.eclipse.ui.navigator.CommonViewer.update(CommonViewer.java:535)
> 	at org.eclipse.jface.viewers.StructuredViewer.update(StructuredViewer.java:2033)
> 	at org.eclipse.jface.viewers.StructuredViewer.handleLabelProviderChanged(StructuredViewer.java:1191)
> 	at org.eclipse.ui.navigator.CommonViewer.handleLabelProviderChanged(CommonViewer.java:235)
> 	at org.eclipse.jface.viewers.ContentViewer$1.labelProviderChanged(ContentViewer.java:97)
> 	at org.eclipse.jface.viewers.BaseLabelProvider$1.run(BaseLabelProvider.java:74)
> 	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> 	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
> 	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
> 	at org.eclipse.jface.viewers.BaseLabelProvider.fireLabelProviderChanged(BaseLabelProvider.java:72)
> 	at org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider$1.labelProviderChanged(DecoratingStyledCellLabelProvider.java:77)
> 	at org.eclipse.ui.internal.decorators.DecoratorManager$1.run(DecoratorManager.java:430)
> 	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> 	at org.eclipse.ui.internal.decorators.DecoratorManager.fireListener(DecoratorManager.java:428)
> 	at org.eclipse.ui.internal.decorators.DecorationScheduler$3.runInUIThread(DecorationScheduler.java:530)
> 	at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
> 	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
> 	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
> 	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3976)
> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3653)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
> 	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:140)
> 	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:611)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
> 	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
> 	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
> 	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
> 	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
> 	at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
> 	at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)