Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在我的Eclipse插件启动时没有触发/捕获WindowOpen事件?_Java_Eclipse_Eclipse Plugin - Fatal编程技术网

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

Java 为什么在我的Eclipse插件启动时没有触发/捕获WindowOpen事件?,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我正在编写一个Eclipse插件,其中一个类实现了IWindowListener。因此,我的类中必须有几个方法,包括windowOpened(IWorkbenchWindow)。我对windowOpened方法的理解是,应该在Eclipse应用程序启动和插件启动时调用它,但是我在这个方法中包含了一些日志语句,它从未被调用过 有人知道为什么会这样吗?有没有人经历过类似的问题 应该注意的是,其他iWindows Listener方法似乎工作正常。例如,当我退出插件正在运行的Eclipse应用程序时,

我正在编写一个Eclipse插件,其中一个类实现了IWindowListener。因此,我的类中必须有几个方法,包括windowOpened(IWorkbenchWindow)。我对windowOpened方法的理解是,应该在Eclipse应用程序启动和插件启动时调用它,但是我在这个方法中包含了一些日志语句,它从未被调用过

有人知道为什么会这样吗?有没有人经历过类似的问题


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

可能是因为在注册IWindowListener时,窗口已经打开了。记住Eclipse插件是惰性启动的;除非您已采取措施提前启动插件,否则它将在第一次加载它的一个类之前无法启动。

您可以使用名为“
”org.eclipse.ui.startup”的扩展点来访问eclipse启动,有了它,您需要实现interface
IStartup
,并且您可以在那里执行任何启动过程。这实际上是在加载实际UI之前完成的。
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
将返回null!您可以通过执行
Display.asyncExec(Runnable)
what-what-will-to-things-started来获得通过

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


另外,在Activator的start()函数中也有一个合适的位置来执行一些插件的启动工作。当您的插件第一次真正加载时,会调用此函数。

您能告诉我如何了解如何让插件尽早启动吗?即使您可以让插件尽早启动,它也可能在工作台窗口打开之前无法启动,但如果您想对其进行研究,请查看此扩展点: