Eclipse rcp 如何在BundleActivator';什么是启动方法?

Eclipse rcp 如何在BundleActivator';什么是启动方法?,eclipse-rcp,Eclipse Rcp,在BundleActivator的start方法中,我需要访问活动的IWorkbenchWindow以向其添加IPartListener。但是,当调用start()方法时 Workbench.getInstance().getActiveWorkbenchWindow() 返回null。 我尝试向Workbench.getInstance()添加一个IwinDownListener,但从未触发窗口打开事件。当我切换到另一个程序并返回eclipse时,只会触发一个窗口激活的事件 如何正确添加IP

在BundleActivator的start方法中,我需要访问活动的IWorkbenchWindow以向其添加IPartListener。但是,当调用start()方法时

Workbench.getInstance().getActiveWorkbenchWindow()
返回null。 我尝试向Workbench.getInstance()添加一个IwinDownListener,但从未触发窗口打开事件。当我切换到另一个程序并返回eclipse时,只会触发一个窗口激活的事件


如何正确添加IPartListener?

Workbench
是一个内部类,您不应该使用它()。内部类可能会在没有通知的情况下更改(事实上,Workbench是在Eclipse3或Eclipse4之间完全重写的)

获取
IWorkbench
界面的官方方式是:

IWorkbench workbench = PlatformUI.getWorkbench();
但是,如果在Eclipse启动时调用得太早,它也可能返回null


在激活器中添加部件侦听器是不常见的,通常是在视图或编辑器部件初始化或命令处理程序或操作中完成的。

我找到了一种方法:

final IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getDisplay().asyncExec(new Runnable() {
   public void run() {
     IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
     if (window != null) {
       // do something
     }
   }
 });
(来自)