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

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


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

最佳答案

您的代码不应取决于getChildren()treeExpanded()的调用顺序。这是TreeViewer的实现细节,将来可能会更改。

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

如果获取操作花费的时间太长而无法在UI线程中运行,请在获取操作完成后在后台线程中运行它并返回一个被替换的占位符元素。有关示例,请参见DeferredTreeContentManagerorg.eclipse.ui

或者,您可以查看JFace DeferredContentProvider是否满足您的需求。

09-05 21:43