Eclipse 4.7.2中SaveAllAction.class缺失问题咨询及替代方案求解
解决Eclipse 4.7.2中
SaveAllAction.class缺失的问题 我帮你梳理清楚这个问题——在Eclipse 4.7.2(Oxygen.2)版本里,SaveAllAction.class确实已经从org.eclipse.ui.workbench插件中移除了,这是Eclipse从3.x过渡到4.x架构时,对传统Action体系进行重构的结果,很多旧的Action类被官方标记为废弃并移除,转而采用更灵活的命令(Command)机制和工作台API。
官方推荐的替代方案
你不用纠结找不到旧类的问题,直接用下面两种官方认可的方式替代即可:
1. 直接调用工作台的saveAll方法
如果只是需要执行“保存所有”的逻辑,最直接的方式是通过IWorkbench接口提供的saveAll方法:
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.IWorkbench; // 获取工作台实例 IWorkbench workbench = PlatformUI.getWorkbench(); // 执行保存所有操作:参数为false时不弹出确认对话框,true则会提示用户确认 workbench.saveAll(false);
2. 使用Eclipse命令系统绑定UI动作
如果需要把“保存所有”绑定到菜单、工具栏按钮等UI元素,或者需要遵循Eclipse的命令扩展机制,推荐使用官方定义的“Save All”命令,其ID为org.eclipse.ui.file.saveAll:
代码中执行命令的示例:
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.commands.ICommandService; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.NotDefinedException; import org.eclipse.core.commands.NotEnabledException; import org.eclipse.core.commands.NotHandledException; // 获取命令服务 ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); // 获取Save All命令 Command saveAllCommand = commandService.getCommand("org.eclipse.ui.file.saveAll"); try { // 执行命令 saveAllCommand.executeWithChecks(null); } catch (ExecutionException | NotDefinedException | NotEnabledException | NotHandledException e) { // 根据业务需求处理异常 e.printStackTrace(); }
在plugin.xml中扩展菜单/工具栏的示例:
如果你是在开发插件,需要在UI中添加“Save All”按钮或菜单项,直接在plugin.xml里引用这个命令ID即可:
<extension point="org.eclipse.ui.menus"> <menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=file"> <command commandId="org.eclipse.ui.file.saveAll" label="Save All" style="push"> </command> </menuContribution> </extension>
补充说明
Eclipse 4.x之后的架构更偏向于基于应用模型(Application Model)的组件化设计,旧的Action类因为耦合度高、扩展性差被逐步淘汰。上面的两种方案都是官方文档中明确推荐的替代方式,完全可以覆盖SaveAllAction原来的所有功能。
内容的提问来源于stack exchange,提问作者Shivendra Prakash Shukla
相关产品推荐
相关产品推荐

