0

如果扩展树的特定元素,我想获取数据。

public void treeExpanded(TreeExpansionEvent event) {  
   Object element = event.getElement();
   if (element instanceof MyClass) {
      fetch.......
   }
} 

问题是内容提供者似乎getChildren()在 treeExpanded() 方法之前触发,所以NullPointerException每次展开元素时我都会得到一个,因为内容提供者试图使用从未获取的数据。我该如何正确解决这个问题?

4

2 回答 2

2

您的代码不应依赖于调用getChildren()and的顺序。treeExpanded()这是一个实现细节,TreeViewer将来可能会改变。

获取要在内容提供者中显示的元素getChildren()inputChanged()内容提供者的元素。

如果您的 fetch 操作在 UI 线程中运行时间过长,请在后台线程中运行它并在 fetch 操作完成后返回一个被替换的占位符元素。例如,请参见DeferredTreeContentManagerorg.eclipse.ui

或者,您可以查看 JFaceDeferredContentProvider是否符合您的需要。

于 2015-07-13T15:57:19.580 回答
1

是的,在触发事件getChildren之前调用了内容提供程序。treeExpanded您不能使用此事件来填充树。

如果您想延迟获取树的某些部分,也许您应该使用SWT.VIRTUAL标志和ILazyTreeContentProvider内容提供程序查看树。

于 2015-07-13T15:31:42.770 回答