2012-04-30 45 views
1

因此,我有兩個命令,它們由PLAY_COMMAND_IDSTOP_COMMAND_ID標識。每個命令分別具有playHandlerstopHandler(這些擴展AbstractHandler類)。這段代碼在激活/禁用命令Eclipse插件開發的IHandler激活方面有什麼問題

這些命令在我的視圖的按鈕樣式的工具欄中貢獻。基本上我想要的是最初PLAY_COMMAND是活躍的,但STOP_COMMAND不是。當點擊PLAY_COMMAND時,它將激活STOP_COMMAND,然後自行關閉(PLAY_COMMAND)。反之亦然STOP_COMMAND點擊。

所以我所做的就是這樣。起初,它起作用了(我點擊了播放按鈕,然後停止按鈕被激活,播放按鈕被禁用,我點擊了停止按鈕,然後播放按鈕被激活,停止按鈕被禁用,但是當我點擊播放按鈕時再次,當停止按鈕被激活時,播放按鈕仍然有效)。那麼,什麼是錯在這裏我的代碼:

private AbstractHandler playHandler, stopHandler, pauseHandler, stepHandler; 
private IHandlerActivation playActivation, stopActivation, pauseActivation, stepActivation; 
private void createHandlers(){ 
    final IHandlerService handlerService = (IHandlerService)getSite().getService(IHandlerService.class); 
    playHandler = new AbstractHandler() { 

     @Override 
     public Object execute(ExecutionEvent event) throws ExecutionException { 
     handlerService.deactivateHandler(playActivation); 
     if(stopActivation == null){ 
      stopActivation = handlerService.activateHandler(STOP_COMMAND_ID, stopHandler); 
     } else { 
      handlerService.activateHandler(stopActivation); 
     } 
     return null; 
     } 
    }; 

    stopHandler = new AbstractHandler() { 

     @Override 
     public Object execute(ExecutionEvent event) throws ExecutionException { 
     handlerService.deactivateHandler(stopActivation); 
     handlerService.activateHandler(playActivation); 
     return null; 
     } 
    }; 
    playActivation = handlerService.activateHandler(PLAY_COMMAND_ID, playHandler); 
    } 
} 

createHandlers()方法被稱爲在createPartControl(Composite parent)方法之我見到底。

回答

0

好的,所以我在這裏找到了。在調用activateHandler(IHandlerActivation)方法時,返回IHandlerActivation,當它被停用時,不能再次用於激活相同的處理程序。因此,解決方法是嘗試撥打handlerService.activateHandler(commandID, playHandler)而不是撥打handlerService.activateHandler(playActivation)