Java Eclipse插件:基于当前选择启用操作
我使用org.eclipse.ui.popupMenus扩展点添加一个子菜单,其操作绑定到以下类:Java Eclipse插件:基于当前选择启用操作,java,eclipse-plugin,Java,Eclipse Plugin,我使用org.eclipse.ui.popupMenus扩展点添加一个子菜单,其操作绑定到以下类: public class MyAction implements IObjectActionDelegate { private Logic logic = Logic.getInstance(); // Singleton public void setActivePart(IAction a, IWorkbenchPart targetPart) {
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()
通知,有什么想法吗?第一次和之后的话让我想知道同步问题。如果推迟了Logic.getInstance()
的初始化,您可能会看到,Eclipse使用所谓的延迟插件激活,因此它首先尽可能多地从plugin.xml派生,并且您观察到的行为在API中有详细的文档记录 不,这与Eclipse处理插件的方式有关。幸运的是,没有同步!