2011-03-03 54 views

回答

4

您可以將IExecutionListener附加到ICommandService。你會得到所有執行的命令的通知。您可以查找您想要的命令標識(在這種情況下,org.eclipse.ui.file.refresh)並執行您的操作

+0

你能舉個例子嗎?我真的是一個日食新手。 – MrCatacroquer 2011-03-03 18:23:08

+0

在另一個評論中,你說你想在Package Explorer中做到這一點。你能指定什麼是你的要求? – 2011-03-04 04:07:19

+0

只需將我的操作添加到包資源管理器刷新事件即可。有了我評論的代碼,如果我的觀點有焦點,我只會得到刷新事件。 – MrCatacroquer 2011-03-04 07:53:58

1

我假設你正在爲Eclipse Helios(3.6)編寫它。

在Eclipse幫助中,在平臺插件開發人員指南 - >程序員指南 - >高級資源概念 - >刷新提供程序中,有一個擴展點。

org.eclipse.core.resources.refreshProviders 

您的類必須擴展RefreshProvider以使用此擴展。

+0

嗨吉爾伯特!我不確定這是我在找什麼。看起來,該提供程序對於監視本地資源非常有用,我只需要知道用戶何時點擊了Eclipse刷新按鈕或F5。 – MrCatacroquer 2011-03-03 13:33:24

+0

嗨MrCatacroquer。我不知道你有選擇。您的刷新提供程序不必刷新任何內容。您必須編寫一個installMonitor方法,但該方法無需執行任何操作,只需讓您的代碼知道正在進行刷新即可。我想,你可以監視整個項目。刷新是否發生在Package Explorer的哪個位置? – 2011-03-03 13:40:42

+0

嗨吉爾伯特,我明白了。 我在我的plugin.xml中放置了以下內容: 和類com.Test.TestRefreshProvider延伸RefreshProvider和 重寫installMonitor方法,但我正在運行它,並沒有什麼是 通過它...我是否缺少東西?? – MrCatacroquer 2011-03-03 14:42:26

0

根據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方法,可以在將來。