所以,我有2个命令,由PLAY_COMMAND_ID
和STOP_COMMAND_ID
标识。每个命令都有每个处理程序,分别是playHandler
和stopHandler
(这些是扩展AbstractHandler
类)。
这些命令以Button样式提供给我视图的工具栏。基本上我想要的是最初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 :(得分:0)
好的,所以我发现了。调用IHandlerActivation
方法时返回的activateHandler(IHandlerActivation)
在停用时不能再次用于激活相同的处理程序。因此,解决方案是尝试调用handlerService.activateHandler(commandID, playHandler)
而不是调用handlerService.activateHandler(playActivation)
。