От дерева к элементу управления TreeViewer

у меня есть этот код

TreeViewer m_treeViewer = new TreeViewer(m_myTree);

где я пытаюсь инициализировать элемент управления просмотра дерева с помощью элемента управления деревом. Элемент управления деревом инициализируется таким образом

m_myTree= new Tree(parent, SWT.VIRTUAL);
setTreeItemListener(); // Add a double mouse click listener

// Code to populate the tree control..

m_myTree.pack();

но каждый раз, когда я выбираю элемент в элементе управления деревом, элемент управления TreeViewer терпит неудачу со следующим журналом стека

!ENTRY org.eclipse.ui 4 0 2011-08-04 12:40:17.944
!MESSAGE Unhandled event loop exception
!STACK 0
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.AbstractTreeViewer.**getTreePathFromItem**(AbstractTreeViewer.java:2870)
    at org.eclipse.jface.viewers.**AbstractTreeViewer.getSelection**(AbstractTreeViewer.java:2893)
    at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1190)
    at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1220)
    at org.eclipse.jface.util.OpenStrategy.**fireSelectionEvent**(OpenStrategy.java:228)
    at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:222)
    at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:389)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1384)

Я не могу понять это, пожалуйста, дайте мне руку. Я попытался связать пустой ILazyTreePathContentProvider, но это тоже не удалось


person Marco A.    schedule 04.08.2011    source источник
comment
1. Что делает ваш слушатель? Можете ли вы показать здесь метод setTreeItemListener()? 2. Возникает ли это исключение, если слушатель пуст?   -  person Ilya Ivanov    schedule 04.08.2011
comment
Да, тоже бывает. Код находится здесь nopaste.info/57b62a0d29.html, но он довольно сложен. так как это происходит и без этого слушателя. Проблема заключается в том, как связать TreeViewer с существующим элементом управления Tree и правильно указать все его элементы и пути.   -  person Marco A.    schedule 04.08.2011


Ответы (2)


Я думаю, это потому, что зрителю не назначен ввод.

person gia    schedule 04.08.2011
comment
Как назначить его на основе существующего элемента управления деревом? - person Marco A.; 04.08.2011
comment
Я думаю, вы это уже поняли, но на всякий случай: используйте метод setInput для просмотра. - person gia; 09.08.2011
comment
Спасибо, я полностью перестроил элемент управления деревом с помощью TreeViewer, он выглядит намного лучше и соответствует шаблону MVC. - person Marco A.; 09.08.2011

Я получаю аналогичную ошибку, когда нажимаю кнопку «Добавить». Я использую Tableviewer и пытался использовать оба синтаксиса, как показано ниже.

m_tableViewer.setSelection(new StructuredSelection(workplaceDetail), true);

и

m_tableViewer.setInput(workplaceDetail);
person Prashant P    schedule 01.11.2012