1

当用户在我的 TreeViewer 中展开特定节点时,它应该展开两层而不是一层。所以我添加了以下代码:

viewer.addTreeListener(new ITreeViewerListener() {
            public void treeCollapsed(TreeExpansionEvent event) {
            }

            public void treeExpanded(TreeExpansionEvent event) {
                if (event.getElement() instanceof Feature) {
                    Feature feature = (Feature) event.getElement();
                    viewer.expandToLevel(feature, 2);
                }
            }
        });

但我只在扩展功能节点时收到此错误消息:

!MESSAGE Ignored reentrant call while viewer is busy. This is only logged once per viewer instance, but similar calls will still be ignored.
!STACK 0
java.lang.RuntimeException
    at org.eclipse.jface.viewers.ColumnViewer.checkBusy(ColumnViewer.java:781)
    at org.eclipse.jface.viewers.AbstractTreeViewer.expandToLevel(AbstractTreeViewer.java:1071)
...

任何想法我做错了什么或如何以另一种方式解决它?

干杯,菲尔

4

1 回答 1

4

您不能像expandToLevel在侦听器中那样调用视图方法,因为查看器已经在处理扩展,并且在执行此操作时并未设计为处理另一个扩展。

您可以在扩展电流完成后使用Display.asyncExectreeExpanded方法运行。expandToLevel

于 2013-11-12T19:41:10.853 回答