未被调用的IActionDelegate的selectionChanged()

我有一个动作类,我想根据文件扩展名启用它。
我已经在action类的selectionChanged()中编写了这个逻辑。

但是,当我开始我的eclipse,并单击上下文菜单的文件时,此方法不会被调用。
当我点击任何动作时,在任何单击该文件后都会调用selectionChanged()方法。

如何在点击eclipse中的文件时始终调用selectionChanged()方法,以便在单击操作之前禁用操作?

根据当前选择的元素类型启用/禁用了大量操作。
例如,请参阅不应复制的元素上的“复制”操作:

http://web.archive.org/web/20120503153234/http://img522.i_mageshack.us/img522/448/eclipseinactivecommand.png

这意味着您可以检查org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart如何管理自己的上下文菜单及其相关操作。

从方法menuAboutToShow() ,使用PackageExplorerActionGroup类,包括管理复制,剪切和粘贴操作的CCPActionGroup
最后一堂课影响了Actions的注册,其中包括CopyToClipboardAction
它确实实现了selectionChanged方法 。

 public void selectionChanged(IStructuredSelection selection) { try { List JavaDoc elements= selection.toList(); IResource[] resources= ReorgUtils.getResources(elements); IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements); if (elements.size() != resources.length + javaElements.length) setEnabled(false); else setEnabled(canEnable(resources, javaElements)); } catch (JavaModelException e) { //no ui here - this happens on selection changes // http://bugs.eclipse.org/bugs/show_bug.cgi?id=19253 if (JavaModelUtil.isExceptionToBeLogged(e)) JavaPlugin.log(e); setEnabled(false); } } 

看起来你正在“厌倦”Eclipse的懒惰插件加载(就像我一样)。 您可以查看Eclipse插件书或弹出窗口的手册 (我假设您正在使用)。 您必须使用所谓的声明机制来启用您的项目。 在您的情况下,它应该像添加nameFilter一样简单。 这样,Eclipse可以避免加载你的插件,直到它实际需要运行(菜单项和插件执行的分离)。