我建立了一个表格查看器,并在其上设置了以下方法:

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.getData()返回null导致的,这是不允许的。

当您使用TableViewer管理表时,一定不要直接操作TableItem对象,TableViewer负责这些对象,更改它们将导致失败。

要对表进行排序,请使用TableViewer.setComparator调用提供基于ViewerComparator的类,该类对数据模型中的对象进行排序。

关于java - 无法刷新jface表查看器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26155691/

10-10 17:05