【问题标题】:Eclipse Plugin: Enablement of an Action based on the current selectionEclipse 插件:根据当前选择启用操作
【发布时间】:2010-04-24 14:01:32
【问题描述】:

我正在使用 org.eclipse.ui.popupMenus 扩展点添加一个子菜单,其 Action 绑定到以下类:

  public class MyAction implements IObjectActionDelegate {

     private Logic logic = Logic.getInstance(); // Singleton

     public void setActivePart(IAction a, IWorkbenchPart targetPart) {
        // Nothing here
     }

     public void run(IAction a) {      
        // Do something...
     }

     public void selectionChanged(IAction a, ISelection s) {
        a.setEnabled(logic.isEnabled(s));
     }
  }

此操作在大多数情况下都能正常工作(包括在selectionChanged() 中调用a.setEnabled())。 第一次调用我的操作时的问题。 selectionChanged 方法仅在显示菜单项后 被调用(而不是在用户做出选择时),这意味着对a.setEnabled() 的调用将没有任何影响。

关于如何让我的操作在第一次被调用之前收到selectionChanged() 通知的任何想法?

【问题讨论】:

    标签: java eclipse-plugin


    【解决方案1】:

    Eclipse 使用所谓的惰性插件激活,因此它首先尽可能多地从 plugin.xml 派生,并且您所观察到的行为在 API 中有详细记录。 See this related question.

    【讨论】:

      【解决方案2】:

      第一次之后这两个词让我想知道同步问题。如果Logic.getInstance() 的初始化被延迟,您可以查看Initialization On Demand Holder Idiom,也在Effective Java 的第71 项中讨论。

      【讨论】:

      • 不,这与Eclipse处理插件的方式有关。幸运的是不涉及同步!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2017-02-23
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多