Eclipse插件:根据当前选择启用Action

时间:2010-04-24 14:01:32

标签: java eclipse-plugin

我正在使用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));
     }
  }

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

单词第一次之后让我想知道同步问题。如果推迟Logic.getInstance()的初始化,您可以查看Initialization On Demand Holder IdiomEffective Java,也在{{3}}的第71项中进行了讨论。