【问题标题】:Eclipse E4 - Menu contribution and PersistedStateEclipse E4 - 菜单贡献和 PersistedState
【发布时间】:2015-06-08 18:19:55
【问题描述】:

我被 Menu Contribution 和 PersistedState 的问题所困扰。在从 VM args 中删除 -clearPersistedState 标志之前,我没有遇到任何问题。

现在,应用程序有一个奇怪的行为,每次执行代码时,菜单贡献都会开始堆积一个菜单条目。

这是包含在处理器中的有罪的 sn-p:

MDirectMenuItem menuItem = MMenuFactory.INSTANCE.createDirectMenuItem();
    menuItem.setLabel("Another Exit");
    menuItem.setContributionURI("bundleclass://"
            + "com.telespazio.optsat.wizard/"
            + ExitHandlerWithCheck.class.getName());
    if (!menu.getChildren().contains(menuItem))
        menu.getChildren().add(menuItem);

【问题讨论】:

    标签: java eclipse rcp e4


    【解决方案1】:

    您添加到应用程序模型的菜单项将被持久化,因此您需要检查它们是否已经存在于菜单中。您当前拥有的contains 支票不会这样做。

    您需要检查标签(或贡献 URI,或 id)的匹配,例如:

    List<MMenuElement> children = menu.getChildren();
    
    boolean gotExisting = false;
    
    for (MMenuElement child : children)
     {
       if ("Another Exit".equals(child.getLabel())
        {
          gotExisting = true;
          break;
        }
     }
    
    if (!gotExisting)
     {
       ... add to menu
     }
    

    【讨论】:

    • 谢谢,只是出于我自己的好奇,不清除持久状态的方法是否会产生其他奇怪的行为?我的意思是,我应该在删除标志后期待什么?
    • 片段存在问题,但现在可能已经解决。
    • 你的意思是有一些错误吗?基本上我认为 -clearPersistedState 标志已由 Eclipse 本身自动添加到我的配置中,这是因为我想知道...
    • 当你测试一个新应用时,你需要 -clearPersistedState 以便你对 Application.e4xmi 所做的设计更改被拾取
    • 那么你是在建议我把那面旗帜放回去吗?否则如果我修改 Application.e4xmi 某些更改不会生效?
    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多