我正在使用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()
次通知?
答案 0 :(得分:1)
Eclipse使用所谓的延迟插件激活,因此它首先从plugin.xml中尽可能多地派生,并且您正在观察的行为在API中有详细记录。 See this related question.
答案 1 :(得分:0)
单词第一次和之后让我想知道同步问题。如果推迟Logic.getInstance()
的初始化,您可以查看Initialization On Demand Holder Idiom的Effective Java,也在{{3}}的第71项中进行了讨论。