【发布时间】:2014-10-02 15:56:12
【问题描述】:
我已经构建了一个表格查看器,并在其上设置了以下方法:
viewer.setContentProvider(new SampleContentProvider());
viewer.setLabelProvider(new SampleLabelProvider());
viewer.setInput(object);
SampleContentProvider 实现 IStructeredContentProvider
和
SampleLabelProvider 实现 ILabelProvider
在对表项进行修改操作后刷新查看器时出现以下异常:
org.eclipse.core.runtime.AssertionFailedException: null argument:
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
at org.eclipse.jface.viewers.StructuredViewer.disassociate(StructuredViewer.java:640)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:727)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:649)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:636)
at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1487)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1422)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1383)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1485)
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:537)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1444)
我已经调试了 SampleContentProvider 的 getElements ,它正在返回一个对象数组...
我不知道为什么查看器上的刷新调用偶尔会导致此异常,因此不会使用修改后的内容更新表。
【问题讨论】:
-
你是如何修改表格的?您必须不直接更改
TableItem。 -
每个表项对我来说都是一个模型对象。因此,每当我单击一个表项并单击修改按钮时,都会弹出一个新对话框,在那里我修改对象的一些属性并保存对象。最后我做了一个 viewer.refresh();
-
嗯,错误是因为
TableItem.getData()正在返回null,你是在调用TableItem.setData吗? -
我使用了一种排序技术对列进行排序,我在调用 TableItem.setText()
-
正如我所说,您不能直接使用
TableItem,TableViewer会处理它们并更改它们会导致这样的失败。排序使用TableViewer.setComparator