回答
您可以將IExecutionListener附加到ICommandService。你會得到所有執行的命令的通知。您可以查找您想要的命令標識(在這種情況下,org.eclipse.ui.file.refresh)並執行您的操作
我假設你正在爲Eclipse Helios(3.6)編寫它。
在Eclipse幫助中,在平臺插件開發人員指南 - >程序員指南 - >高級資源概念 - >刷新提供程序中,有一個擴展點。
org.eclipse.core.resources.refreshProviders
您的類必須擴展RefreshProvider以使用此擴展。
嗨吉爾伯特!我不確定這是我在找什麼。看起來,該提供程序對於監視本地資源非常有用,我只需要知道用戶何時點擊了Eclipse刷新按鈕或F5。 – MrCatacroquer 2011-03-03 13:33:24
嗨MrCatacroquer。我不知道你有選擇。您的刷新提供程序不必刷新任何內容。您必須編寫一個installMonitor方法,但該方法無需執行任何操作,只需讓您的代碼知道正在進行刷新即可。我想,你可以監視整個項目。刷新是否發生在Package Explorer的哪個位置? – 2011-03-03 13:40:42
嗨吉爾伯特,我明白了。 我在我的plugin.xml中放置了以下內容:
根據Prakash G. R.,我顯示示例代碼。 由於Activator中的初始化代碼在我們需要使用Workbench時不起作用,因此我使用啓動擴展點。 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內部機制。 刷新事件使用舊操作機制,並且ExternalActionManager直接調用 preExecute方法,其中事件沒有要選擇的數據。
我想要的第二式
IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);
可以是preExecute方法,可以在將來。
- 1. F5(刷新)作爲提交
- 2. f5 - 只刷新幀
- 3. 在BHO中爲IE9刷新(F5)eventHandler
- 4. 全屏刷新 - Ctrl + F5
- 5. 頁面刷新問題(F5)
- 6. firefox F5做部分刷新
- 7. 刷新頁面時Grails中的奇怪GORM行爲(F5)
- 8. 爲什麼我的數據在Firefox中進行F5刷新後四處移動?
- 9. Perl將文本附加到新行
- 10. 刷新contenturl在附加sdk
- 11. 如何將行爲附加到文檔
- 12. f5,CTRL + F5和點擊或刷新按鈕之間的區別?
- 13. 防止按F5上的頁面刷新
- 14. Internet Explorer的刷新(F5)邏輯
- 15. F5刷新瀏覽器不會重新加載在durandaljs
- 16. PHP刷新窗口?相當於F5頁面重新加載?
- 17. 將行爲附加到所有型號
- 18. 如何將表單輸入附加到變量而不刷新?
- 19. 當我做一個緩存刷新(Ctrl + F5),我會死
- 20. 強制按F5刷新時,瀏覽器或刷新按鈕
- 21. Control-F5瀏覽器刷新(Flash對象不刷新)
- 22. 從mysql每刷新一次(f5)
- 23. 骨幹保持URL刷新f5
- 24. Delphi Chromium Embedded - 使用F5刷新頁面
- 25. 關閉f5刷新子窗口
- 26. 檢測F5被按下和刷新
- 27. ASP.NET Web窗體和F5刷新問題
- 28. 刷新.js文件沒有按F5
- 29. 禁用的按鈕,當我刷新網頁與F5
- 30. F5沒有完全刷新我的頁面
你能舉個例子嗎?我真的是一個日食新手。 – MrCatacroquer 2011-03-03 18:23:08
在另一個評論中,你說你想在Package Explorer中做到這一點。你能指定什麼是你的要求? – 2011-03-04 04:07:19
只需將我的操作添加到包資源管理器刷新事件即可。有了我評論的代碼,如果我的觀點有焦點,我只會得到刷新事件。 – MrCatacroquer 2011-03-04 07:53:58