Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 未翻译fragment.e4xmi提供的MenuItems,缺少contributorURI_Java_Eclipse_Osgi_Eclipse Rcp - Fatal编程技术网

Java 未翻译fragment.e4xmi提供的MenuItems,缺少contributorURI

Java 未翻译fragment.e4xmi提供的MenuItems,缺少contributorURI,java,eclipse,osgi,eclipse-rcp,Java,Eclipse,Osgi,Eclipse Rcp,我的Eclipse4RCP应用程序有一个奇怪的问题,由于缺少contributorURI,它有时无法翻译某些菜单项 处境 我目前正在开发一个由多个本地化插件组成的Eclipse4RCP应用程序 其中一个插件是com.mobatime.nms.masterclock.common.ui。它的fragment.e4xmi将一些本地化的MenuItems添加到主菜单栏,主菜单栏由另一个插件(com.mobatime.nms.app)的应用程序.e4xmi控制。对于本地化,我的意思是MenuItem的标

我的Eclipse4RCP应用程序有一个奇怪的问题,由于缺少
contributorURI
,它有时无法翻译某些菜单项

处境 我目前正在开发一个由多个本地化插件组成的Eclipse4RCP应用程序

其中一个插件是
com.mobatime.nms.masterclock.common.ui
。它的
fragment.e4xmi
将一些本地化的
MenuItems
添加到主菜单栏,主菜单栏由另一个插件(
com.mobatime.nms.app
)的
应用程序.e4xmi
控制。对于本地化,我的意思是
MenuItem
的标签是在
OSGI-INF/l10n/bundle.properties
文件中定义的
OSGI
变量(例如
%commands.somecommand

然而,在我的应用程序中,大约50%的启动中,
masterclock
插件提供的
MenuItems
没有被翻译
,因此
OSGI
变量的名称被用作
MenuItem
的标签

我已经发现的事情
  • 在互联网上做了一些研究之后,我发现这显然描述了一个与我的问题相对类似的问题。然而,这个线程已经有五年的历史了,他们发现的所描述的bug在旧版本的EclipseSDK中得到了修复

  • 我将ModelSpy插件导入到我的应用程序中,因为它有助于找到我上面提到的线程中的bug。检查
    菜单项后,我发现当缺少翻译时,每个项目的
    贡献者URI
    没有设置

  • 翻译正确后,已贡献的
    菜单项的
    贡献者URI
    包含
    平台:/plugin/com.mobatime.nms.masterclock.common.ui

补充资料
  • 我们使用最新版本的Eclipse库(SDK、RCP等)
  • 这些库的较旧版本也会出现此问题(我们之前使用了4.4.2版)
  • EclipseIDE中的常规构建和调试会话之间没有区别,错误无处不在
  • 在其他项目上,正确填写了
    贡献者URI
  • org.eclipse.e4.workbench
    元数据的
    workbench.xmi
    文件中,contributorURI未保存在受影响的
    MenuItems
  • 使用
    -clearPersistedState
    时,不会出现问题

有人知道如何解决这个问题吗?

我做了一些进一步的研究,发现在我的情况下,问题与应用程序启动和应用程序.e4xmi加载的时间有关

受影响菜单项的contributorUri被正确地保存到该文件中(与我在第一篇文章中所写的内容相矛盾),但是当从该文件加载应用程序模型时,Uri不是从该文件中正确读取就是没有设置为菜单项

我目前的解决方法是在应用程序启动时手动设置受影响菜单项的contributorUri。这很可能不是最好的解决方案,但目前它仍然有效:

MTrimmedWindow trim = (MTrimmedWindow) modelService.find("your-window-id", application);
MMenu menu = (MMenu)modelService.find("your-menu-id", trim.getMainMenu());
if(menu != null) {
    for(MMenuElement item : menu.getChildren()) {
        if(item instanceof MHandledMenuItem && item.getElementId().contains("some-common-string-in-the-menuitem-id")) {
                item.setContributorURI("platform:/plugin/com.example.yourcontributingplugin");
        }
    }
}

您是在使用持久化状态以便从保存的状态重新加载模型,还是在使用
-clearPersistedState
来防止这种情况(因此每次都从片段构建模型)?我没有使用
clearPersistedState
,但是当我将其添加到调试配置中时,问题不再发生。可能是Eclipse的持久性逻辑中存在错误?您可以查看
org.Eclipse.e4.workbench
元数据中
workbench.xmi
文件中的持久化状态,以查看是否保存了contributorURI。工作台文件不会为受影响的
MenuItems
保存contributorURI。。。我在原来的帖子中添加了新信息。