Java 返回SWT/JFace视图

Java 返回SWT/JFace视图,java,view,static,swt,jface,Java,View,Static,Swt,Jface,我使用SWT/JFace实现了一个复杂的视图,不幸的是,我为不同的元素使用了很多静态成员。现在我想将这些元素重构为实例变量,但也有许多外部类和方法依赖于这些元素 例如,此视图中的TreeViewer被声明为static,我实现了一个简单的staticgetTreeViewer方法,该方法通过JFace操作调用,同样是静态的。它工作得很好 所以我考虑为我的视图类扩展org.eclipse.ui.part.ViewPart实现一种getter方法。我希望通过这种方式,我能够在需要时将该视图的实例(在

我使用SWT/JFace实现了一个复杂的视图,不幸的是,我为不同的元素使用了很多静态成员。现在我想将这些元素重构为实例变量,但也有许多外部类和方法依赖于这些元素

例如,此视图中的
TreeViewer
被声明为static,我实现了一个简单的static
getTreeViewer
方法,该方法通过JFace操作调用,同样是静态的。它工作得很好

所以我考虑为我的视图类扩展
org.eclipse.ui.part.ViewPart
实现一种getter方法。我希望通过这种方式,我能够在需要时将该视图的实例(在运行时Eclipse中)返回到外部类,并且通过这种方式可以访问以前静态的now实例字段的实际值


但是现在,如果没有静态字段和方法,我必须使用new关键字才能调用非静态方法,这显然会导致NPE,因为不会调用任何
createPartControl()
方法。或者我应该能够以某种方式返回已经实例化的视图?这就是我所缺少的?整个视图的返回方法应该是什么样子的,以便在实际状态下可以访问其内部方法?有没有一个简单的方法可以做到这一点?谢谢

您可以获得如下视图:

ExampleView view = (ExampleView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("viewId");
if (view != null) {
    view.getTreeViewer();
}
现在您可以访问视图的所有公共方法

如果您在其他视图或编辑器中,请使用:

ExampleView view = (ExampleView) getSite().getWorkbenchWindow().getActivePage().findView("viewId");
if (view != null) {
    view.getTreeViewer();
}

忘了提一下,但可能很清楚,这不是一种类似于单例的情况,因此视图没有一个声明的字段,它保存了它。但是必须有某个地方的实例,可以访问,对吗?