为什么我的Eclipse插件启动时没有触发/捕获windowOpened事件?

时间:2011-01-25 20:51:44

标签: java eclipse eclipse-plugin

我正在编写一个Eclipse插件,其中一个类实现了IWindowListener。因此,我有一些必须在我的类中的方法,包括windowOpened(IWorkbenchWindow窗口)。我对windowOpened方法的理解是它应该在启动Eclipse Application并且插件启动时被调用,但是我在这个方法中包含了一些日志语句而且它永远不会被调用。

有谁知道为什么会这样?有没有人遇到类似的问题?

应该注意的是,其他IWindowListener方法似乎工作正常。例如,当我退出运行插件的Eclipse应用程序时,正确调用了windowClosed方法。

2 个答案:

答案 0 :(得分:1)

可能是因为在注册IWindowListener时,窗口已经打开。请记住Eclipse插件是懒洋洋地启动的;除非你已经采取措施让你的插件尽早启动,否则它将在第一次加载其中一个类之后才开始。

答案 1 :(得分:1)

您可以使用名为"org.eclipse.ui.startup"的扩展点访问eclipse启动,这需要实现接口IStartup,您可以在那里执行任何启动过程。这实际上是在实际UI加载之前完成的。 PlatformUI.getWorkbench().getActiveWorkbenchWindow()将返回null!你可以通过Display.asyncExec(Runnable)获得通过,等待事情开始

请注意,这不会加载您的eclipse插件,IStartup类只是在启动时执行。你自己的插件应该在第一次需要时加载,而不是在那之前。因为在真正需要它之前不需要启动它。

也是在Activator的start()函数中进行一些插件启动的合适位置。当你的插件第一次真正加载时会调用它。