如何在BundleActivator的start方法中访问活动的IWorkbenchWindow?

时间:2014-04-15 19:51:47

标签: eclipse-rcp

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

Workbench.getInstance().getActiveWorkbenchWindow()

返回null。 我尝试将IWindowListener添加到Workbench.getInstance(),但是永远不会触发窗口打开事件。当我切换到另一个程序并回到eclipse时,只触发了一个窗口激活的事件。

如何正确添加IPartListener?

2 个答案:

答案 0 :(得分:1)

Workbench是一个内部类,您不应该使用它(Eclipse API Rules of Engagement)。内部类可能会在不事先通知的情况下进行更改(实际上Workbench已在Eclipse 3或4之间完全重写)。

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

IWorkbench workbench = PlatformUI.getWorkbench();

但是,如果在Eclipse启动时太早调用它,它也可能返回null。

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

答案 1 :(得分:0)

我找到了办法:

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

(来自Eclipse documentation