我正在为Eclipse编写一个插件,我想将我的一个操作附加到Eclipse F5 / Refresh事件。
任何人都可以帮助我吗? 谢谢!
答案 0 :(得分:4)
您可以将IExecutionListener附加到ICommandService。您将收到所有已执行命令的通知。您可以查找所需的命令ID(在本例中为org.eclipse.ui.file.refresh)并执行操作
答案 1 :(得分:1)
我假设你正在为Eclipse Helios(3.6)写这篇文章。
在Eclipse帮助中,在Platform Plug-in Developer Guide中 - >程序员指南 - >高级资源概念 - >刷新提供商,有一个扩展点。
org.eclipse.core.resources.refreshProviders
您的类必须扩展RefreshProvider才能使用此扩展。
答案 2 :(得分:0)
根据Prakash G. R.,我展示了示例代码。 因为如果我们需要使用Workbench,Activator中的初始化代码不起作用,因此我使用了启动扩展点。 plugin.xml是
<extension
point="org.eclipse.ui.startup">
<startup
class="sampleplugin.MyStartUp">
</startup>
</extension>
因此,在MyStartUp类中,我们将ExecutionListener添加到ICommandService。 重要的是preExecute方法中的ExecutionEvent无法执行 提取选择。这与Command中的常见ExecutionEvent不同。 因此,MyStartUp.java是
public class MyStartUp implements IStartup {
@Override
public void earlyStartup() {
ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService .class);
service.addExecutionListener(
new IExecutionListener() {
...
@Override
public void postExecuteSuccess(String commandId,
Object returnValue) {
// do something post
}
@Override
public void preExecute(String commandId,
final ExecutionEvent event) {
if (org.eclipse.ui.IWorkbenchCommandConstants.FILE_REFRESH.equals(commandId) ) {
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
ISelection selection = page.getSelection();
// do something using selection
}
}
});
}
}
我使用
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
ISelection selection = page.getSelection();
而不是
IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);
因为上述原因。但是,这是由Eclipse内部机制引起的。
refresh事件使用旧的操作机制和ExternalActionManager调用
preExecute方法直接在其中事件没有数据可供选择。
我想要第二个公式
IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);
将来可以在preExecute方法中使用。