Problems with TableViewer.refresh() [message #303440] |
Mon, 15 May 2006 15:04  |
Eclipse User |
|
|
|
Originally posted by: luci_cioroga.yahoo.com
I have an engine that calculates some output depending on some inputs. The output is showed in a Table (using TableViewer).
I am using TableViewer.refresh() to refresh the table when the content (output) changes. I have a content provider and I register a custom made trigger that uses syncExec to call TableViewer.refresh(). I am also using a custom made TableCursor that is using SWT.EraseItem event to paint the selection at cell level.
The problem is that, when several items in the output changes, there's a need to make several updates (several calls to the syncExec that runs TableViewer.refresh(). Only when more than 2 of there updates are required for the interface to stabilize, the problem starts occuring.
If I don't use my own TableCursor, everything works fine. I have backtraced the problem and I've come up with this: when I add a listener on SWT.EraseItem the problem starts occuring even if the handleEvent method doesn't do anything!!!! It seems that when I register a listener on EraseItem some evets fail to be dealed with correctly. I am need of a solution or, at least an expanation. Any ideas?
Here is the stack trace:
java.lang.NullPointerException
at org.eclipse.swt.widgets.TableItem.getBounds(TableItem.java:2 34)
at org.eclipse.swt.widgets.Table.sendEraseItemEvent(Table.java: 2829)
at org.eclipse.swt.widgets.Table.CDDS_SUBITEMPREPAINT(Table.jav a:485)
at org.eclipse.swt.widgets.Table.wmNotifyChild(Table.java:5327)
at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3794)
at org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:1 166)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3298 )
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:184 2)
at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:258)
at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:183)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334 )
at org.eclipse.swt.widgets.Table.windowProc(Table.java:4491)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:184 2)
at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:258)
at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:183)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334 )
at org.eclipse.swt.widgets.Table.windowProc(Table.java:4491)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:184 2)
at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:258)
at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:183)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334 )
at org.eclipse.swt.widgets.Table.windowProc(Table.java:4491)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
at org.eclipse.swt.internal.win32.OS.SendMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.SendMessage(OS.java:2514)
at org.eclipse.swt.widgets.Table.remove(Table.java:2520)
at org.eclipse.jface.viewers.TableViewer.internalRefreshAll(Tab leViewer.java:906)
at org.eclipse.jface.viewers.TableViewer.internalRefresh(TableV iewer.java:818)
at org.eclipse.jface.viewers.TableViewer.internalRefresh(TableV iewer.java:807)
at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredV iewer.java:1388)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelecti on(StructuredViewer.java:1323)
at org.eclipse.jface.viewers.StructuredViewer.refresh(Structure dViewer.java:1386)
at org.eclipse.jface.viewers.StructuredViewer.refresh(Structure dViewer.java:1345)
at xcp.content.hcc.breakdown.HCCBreakdownViewer.refresh(HCCBrea kdownViewer.java:127)
at xcp.content.hcc.breakdown.HCCBreakdownViewer.update(HCCBreak downViewer.java:142)
at xcp.content.UpdateThread.run(UpdateThread.java:18)
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.j ava:152)
at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchroniz er.java:28)
at org.eclipse.swt.widgets.Display.syncExec(Display.java:3763)
at xcp.content.hcc.breakdown.HCCBreakdownViewer$1.triggeredUpda te(HCCBreakdownViewer.java:105)
at hcc.engine.io.BoundedConfiguration.triggerConfigurationUpdat e(BoundedConfiguration.java:95)
at hcc.engine.io.BoundedConfiguration.refresh(BoundedConfigurat ion.java:125)
at hcc.engine.io.BoundedConfiguration.triggeredBindingUpdate_1( BoundedConfiguration.java:116)
at hcc.engine.io.BoundedEntity.triggeredBindingUpdate(BoundedEn tity.java:47)
at hcc.engine.io.BoundedEntity$BindingsTrigger.triggeredUpdate( BoundedEntity.java:89)
at hcc.engine.Binding.triggerUpdate(Binding.java:58)
at hcc.engine.Engine.activate(Engine.java:86)
at hcc.engine.Activator.activate(Activator.java:46)
at hcc.engine.Monitor.triggeredUpdate(Monitor.java:86)
at func.contexts.TriggeredContext.triggerUpdate(TriggeredContex t.java:71)
at func.contexts.TriggeredContext.update(TriggeredContext.java: 45)
at hcc.engine.Binding.update(Binding.java:38)
at hcc.engine.io.BoundedValueParameter.setValue(BoundedValuePar ameter.java:51)
at xcp.content.hcc.properties.HCCPropertiesCellEditorProvider.u pdate(HCCPropertiesCellEditorProvider.java:97)
at custom.TableEditor.update(TableEditor.java:76)
at custom.TableEditor$1.handleEvent(TableEditor.java:55)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:937)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:965)
at org.eclipse.swt.widgets.Combo.sendKeyEvent(Combo.java:1164)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:961)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1275)
at org.eclipse.swt.widgets.Combo.wmChar(Combo.java:2061)
at org.eclipse.swt.widgets.Combo.windowProc(Combo.java:1846)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:19 23)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :2966)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:1914)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:419)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:143)
at xcp.Application.run(Application.java:18)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(Pl atformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336 )
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
|
|
|
Re: Problems with TableViewer.refresh() [message #303442 is a reply to message #303440] |
Mon, 15 May 2006 16:39  |
Eclipse User |
|
|
|
There have been fixes made in the past related to adding an EraseItem
listener (even an empty one), but if you still see this with a recent
eclipse build (eg.- 3.2RC4) then please log a bug report with Platform -
SWT, and provide a stand-alone snippet that shows the problem happening.
http://www.eclipse.org/swt/faq.php#whatisasnippet
Thanks!
Grant
"Cioroga Ilie Lucian" <luci_cioroga@yahoo.com> wrote in message
news:7919995.1147719875535.JavaMail.root@cp1.javalobby.org...
> I have an engine that calculates some output depending on some inputs. The
output is showed in a Table (using TableViewer).
>
> I am using TableViewer.refresh() to refresh the table when the content
(output) changes. I have a content provider and I register a custom made
trigger that uses syncExec to call TableViewer.refresh(). I am also using a
custom made TableCursor that is using SWT.EraseItem event to paint the
selection at cell level.
>
> The problem is that, when several items in the output changes, there's a
need to make several updates (several calls to the syncExec that runs
TableViewer.refresh(). Only when more than 2 of there updates are required
for the interface to stabilize, the problem starts occuring.
>
> If I don't use my own TableCursor, everything works fine. I have
backtraced the problem and I've come up with this: when I add a listener on
SWT.EraseItem the problem starts occuring even if the handleEvent method
doesn't do anything!!!! It seems that when I register a listener on
EraseItem some evets fail to be dealed with correctly. I am need of a
solution or, at least an expanation. Any ideas?
>
> Here is the stack trace:
> java.lang.NullPointerException
> at org.eclipse.swt.widgets.TableItem.getBounds(TableItem.java:2 34)
> at org.eclipse.swt.widgets.Table.sendEraseItemEvent(Table.java: 2829)
> at org.eclipse.swt.widgets.Table.CDDS_SUBITEMPREPAINT(Table.jav a:485)
> at org.eclipse.swt.widgets.Table.wmNotifyChild(Table.java:5327)
> at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3794)
> at org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:1 166)
> at org.eclipse.swt.widgets.Control.windowProc(Control.java:3298 )
> at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
> at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
> at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:184 2)
> at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:258)
> at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:183)
> at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334 )
> at org.eclipse.swt.widgets.Table.windowProc(Table.java:4491)
> at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
> at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
> at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:184 2)
> at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:258)
> at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:183)
> at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334 )
> at org.eclipse.swt.widgets.Table.windowProc(Table.java:4491)
> at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
> at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
> at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:184 2)
> at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:258)
> at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:183)
> at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334 )
> at org.eclipse.swt.widgets.Table.windowProc(Table.java:4491)
> at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
> at org.eclipse.swt.internal.win32.OS.SendMessageW(Native Method)
> at org.eclipse.swt.internal.win32.OS.SendMessage(OS.java:2514)
> at org.eclipse.swt.widgets.Table.remove(Table.java:2520)
> at
org.eclipse.jface.viewers.TableViewer.internalRefreshAll(Tab leViewer.java:90
6)
> at
org.eclipse.jface.viewers.TableViewer.internalRefresh(TableV iewer.java:818)
> at
org.eclipse.jface.viewers.TableViewer.internalRefresh(TableV iewer.java:807)
> at
org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredV iewer.java:1388)
> at
org.eclipse.jface.viewers.StructuredViewer.preservingSelecti on(StructuredVie
wer.java:1323)
> at
org.eclipse.jface.viewers.StructuredViewer.refresh(Structure dViewer.java:138
6)
> at
org.eclipse.jface.viewers.StructuredViewer.refresh(Structure dViewer.java:134
5)
> at
xcp.content.hcc.breakdown.HCCBreakdownViewer.refresh(HCCBrea kdownViewer.java
:127)
> at
xcp.content.hcc.breakdown.HCCBreakdownViewer.update(HCCBreak downViewer.java:
142)
> at xcp.content.UpdateThread.run(UpdateThread.java:18)
> at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.j ava:152)
> at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchroniz er.java:28)
> at org.eclipse.swt.widgets.Display.syncExec(Display.java:3763)
> at
xcp.content.hcc.breakdown.HCCBreakdownViewer$1.triggeredUpda te(HCCBreakdownV
iewer.java:105)
> at
hcc.engine.io.BoundedConfiguration.triggerConfigurationUpdat e(BoundedConfigu
ration.java:95)
> at
hcc.engine.io.BoundedConfiguration.refresh(BoundedConfigurat ion.java:125)
> at
hcc.engine.io.BoundedConfiguration.triggeredBindingUpdate_1( BoundedConfigura
tion.java:116)
> at
hcc.engine.io.BoundedEntity.triggeredBindingUpdate(BoundedEn tity.java:47)
> at
hcc.engine.io.BoundedEntity$BindingsTrigger.triggeredUpdate( BoundedEntity.ja
va:89)
> at hcc.engine.Binding.triggerUpdate(Binding.java:58)
> at hcc.engine.Engine.activate(Engine.java:86)
> at hcc.engine.Activator.activate(Activator.java:46)
> at hcc.engine.Monitor.triggeredUpdate(Monitor.java:86)
> at func.contexts.TriggeredContext.triggerUpdate(TriggeredContex t.java:71)
> at func.contexts.TriggeredContext.update(TriggeredContext.java: 45)
> at hcc.engine.Binding.update(Binding.java:38)
> at
hcc.engine.io.BoundedValueParameter.setValue(BoundedValuePar ameter.java:51)
> at
xcp.content.hcc.properties.HCCPropertiesCellEditorProvider.u pdate(HCCPropert
iesCellEditorProvider.java:97)
> at custom.TableEditor.update(TableEditor.java:76)
> at custom.TableEditor$1.handleEvent(TableEditor.java:55)
> at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :66)
> at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
> at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952)
> at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:937)
> at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:965)
> at org.eclipse.swt.widgets.Combo.sendKeyEvent(Combo.java:1164)
> at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:961)
> at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1275)
> at org.eclipse.swt.widgets.Combo.wmChar(Combo.java:2061)
> at org.eclipse.swt.widgets.Combo.windowProc(Combo.java:1846)
> at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025 )
> at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
> at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:19 23)
> at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :2966)
> at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:1914)
> at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
> at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:419)
> at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:143)
> at xcp.Application.run(Application.java:18)
> at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(Pl atformActivator.
java:78)
> at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(
EclipseAppLauncher.java:92)
> at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAp
pLauncher.java:68)
> at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:400)
> at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:177)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336 )
> at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
> at org.eclipse.core.launcher.Main.run(Main.java:977)
> at org.eclipse.core.launcher.Main.main(Main.java:952)
|
|
|
Powered by
FUDForum. Page generated in 0.04971 seconds