【问题标题】:Eclipse Luna: Handlers' @CanExecute methods not calledEclipse Luna:未调用处理程序的 @CanExecute 方法
【发布时间】:2014-06-25 16:16:37
【问题描述】:

Eclipse Luna RCP 中的命令处理程序有问题。

在我的 E4 应用程序模型中,我定义了一些必须启用的命令和相关处理程序 仅在某些情况下。出于这个原因,在我的处理程序 POJO 中,我实现了 用@CanExecute 注释的方法,我在其中检查所需的条件。

我还定义了与这些命令相关的菜单和工具栏项。

问题是我的@CanExecute 方法没有被正确调用,因此, 菜单和工具栏项没有相应地启用/禁用。

特别是,对于菜单项,@CanExecute 方法仅在应用程序启动时被调用几次,但此后就不再调用。

对于工具栏项,@CanExecute 方法仅在活动上下文发生变化时调用(例如,在更改活动部分或打开新外壳时)。

在 Kepler 中,行为完全不同(并且按预期工作):

  • 对于菜单项,每次显示菜单时都会调用 @CanExecute 方法
  • 对于工具栏项,有一个计时器每 400 毫秒调用一次 @CanExecute 方法

这是 Luna 中的已知错误吗?您知道实现预期行为的任何可能解决方法吗?

谢谢!

【问题讨论】:

    标签: eclipse-rcp handler e4 canexecute eclipse-luna


    【解决方案1】:

    这是在错误427465 和436755 中描述的 Eclipse Luna 中的设计更改

    您可以使用以下方式运行工具栏@CanExecute 方法:

    eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, UIEvents.ALL_ELEMENT_ID);
    

    'eventBroker' 是 IEventBroker。

    【讨论】:

    • 感谢您的回答。此解决方案是否也适用于菜单项?
    • 我没有看到主菜单 @CanExecute 方法有问题
    • 我想我发现了菜单项的问题。它与 Unity 面板有关(我正在 Ubuntu 下开发)。如果我使用 UBUNTU_MENUPROXY 环境变量的空值运行我的应用程序,则正确调用 @CanExecute 方法。否则,我会遇到我在帖子中描述的问题。
    • 我添加了该行,但它对我不起作用:-(。我应该订阅该活动吗?
    • @whomaniac 不,你不订阅这个。您在代码中要强制运行工具栏项 CanExecute 方法的位置进行此调用(仅适用于工具栏)。如果您仍然遇到问题,请提出新问题。
    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多