2014-10-02 2 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) 

Я отлажена getElements SampleContentProvider, он возвращает массив объектов ...

Я понятия не имею, почему это обновление вызов на зрителе случайна вызывает это исключение и, следовательно, не обновляет таблицу с модифицирована содержание.

+0

Как вы изменяете таблицу? Вы должны ** не ** напрямую изменять «TableItem». –

+0

Каждый элемент таблицы является модельным объектом для меня. Поэтому всякий раз, когда я нажимаю элемент таблицы и нажимаю кнопку «Изменить», появляется новое диалоговое окно, там я изменяю некоторые свойства объекта и сохраняю объект. Наконец, я делаю viewer.refresh(); – user1168608

+0

Ну, ошибка в том, что 'TableItem.getData()' возвращает значение null, вы вообще вызываете 'TableItem.setData'? –

ответ

2

Неисправность вызвана TableItem.getData(), возвращая null, что недопустимо.

При использовании TableViewer для управления таблицей, не должен манипулировать TableItem объектов непосредственно, TableViewer отвечает за них и их изменение приведет к сбоям.

Для сортировки таблицы используйте вызов TableViewer.setComparator, чтобы предоставить класс на основе ViewerComparator, который сортирует объекты в вашей модели данных.