2014-10-02 53 views
0

我建立了一個表查看器,我已經設置了以下方法:無法刷新的JFace表查看

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,它返回一個對象數組...

我不知道爲什麼觀衆這個刷新調用偶爾導致該異常,因此不具有修改更新表內容。

+0

你如何修改表格?你必須**不要**直接改變'TableItem'。 – 2014-10-02 06:54:29

+0

每個表項都是我的模型對象。所以每當我點擊一個表項並點擊修改按鈕,彈出一個新的對話框,在那裏我修改對象上的一些屬性並保存對象。最後我做一個viewer.refresh(); – user1168608 2014-10-02 06:57:46

+0

那麼錯誤是因爲'TableItem.getData()'返回null,你是否調用'TableItem.setData'呢? – 2014-10-02 07:02:34

回答

2

失敗是由TableItem.getData()返回null引起的,這是不允許的。

當您使用TableViewer來管理表格時,您不得直接操作TableItem對象,TableViewer負責這些操作並更改它們將導致故障。

要對錶格進行排序,請使用TableViewer.setComparator調用來提供基於ViewerComparator的類,以便對數據模型中的對象進行排序。