如何在运行时以编程方式刷新Eclipse主菜单

时间:2016-02-02 16:10:30

标签: eclipse plugins rcp

我正在寻找一种方法来强制Eclipse以编程方式刷新/重建自己的主菜单甚至是运行时的整个视图。

我之所以需要这种方式是因为我有一个插件可以遍历项目,并且根据所选项目的配置,它在运行时加载一个项目特定的插件:

FrameworkUtil.getBundle(this.getClass()).getBundleContext().installBundle(String).start()

现在加载的插件有助于org.eclipse.ui.main.menu扩展点,即使安装了插件,我也看不到新的菜单项。

仅供参考:我正在使用Eclipse 3.x和E4工具

现在我的问题是:

  • 是否有一种方法可以刷新/重建Eclipse ui的部分内容,甚至可能是整个ui?
  • 如果没有,有人会想到另一种方法吗?我想过有一个插件只提供menu并以编程方式添加menu items。 但我无法相信没有办法刷新视图所以我问这个问题。

我检查了MMenu是否有自己的刷新方法,所以我可以获取对象并只调用刷新方法。

但最终我找不到办法做到这一点。

P.S。我对插件开发和RCP很新,所以如果解决方案很明显但我没有意识到,请不要责怪我

1 个答案:

答案 0 :(得分:0)

刷新/重建UI

简短回答:

在许多地方加载了Eclipse扩展点,信息存储在静态字段中(通常在Singleton中)。 plugin.xml数据在应用程序的生命周期内不会重新加载,当然这些bundle不会监听允许它们检测此类更改的bundle事件。

因此,即使有一些方法在整个UI上调用刷新,至少一些(大多数?)代码处理扩展点也不会看到新plugin.xmls的效果。

另一种方法

要回答你想要做的事情,"正常"要做的就是让每个菜单贡献的可见性取决于某些表达,例如如果当前选择适应MySpecialProject,您可以将其显示。

当你以正常的方式执行它,并且你把所有东西都延迟加载时,在第一次实际调用这些命令之前,不会加载所有这些项目类型插件的java代码。

要进行下一步,您可能会有一个主ui插件,它定义了一堆命令(例如构建项目,flash指示灯,格式文件等),但没有在该主插件中关联的命令处理程序 - 在。在每个项目类型插件中,具有仅在正确的项目类型处于活动状态时启用的命令处理程序。

假设您已经在Eclipse中使用basic tutorial命令,vogella.com上有一个很好的高级命令,它涵盖了许多有用的功能,可以保持正常动态。