【问题标题】:Not able to refresh the jface table viewer无法刷新 jface 表查看器
【发布时间】: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()
  • 正如我所说,您不能直接使用TableItemTableViewer 会处理它们并更改它们会导致这样的失败。排序使用TableViewer.setComparator

标签: java eclipse swt jface


【解决方案1】:

失败是由TableItem.getData()返回null造成的,这是不允许的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多