我一直试图在eclipse中以编程方式调用刷新(F5),并得到一个NotHandledException,handler not found error。非常感谢您的帮助。
在我的课堂上:NewPreferencesPage扩展了PreferencesPage实现了IWorkbenchPreferencesPage我有以下代码:
@Override
public void dispose() {
super.dispose();
final String COMMAND_ID = "org.eclipse.ui.file.refresh";
IHandlerService handlerService = PlatformUI.getWorkbench().getService(IHandlerService.class);
try {
handlerService.executeCommand(COMMAND_ID,null);
} catch (ExecutionException ex) {
ex.printStackTrace();
} catch (NotDefinedException ex) {
ex.printStackTrace();
} catch (NotEnabledException ex) {
ex.printStackTrace();
} catch (NotHandledException ex) {
ex.printStackTrace();
}
}
您可以使用IResource#refreshLocal()
,它具有(几乎)相同的效果。以下是单个文件的示例,但您可以用相同的方式执行项目:
IResource dfile = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
dfile.create(blahblahblah, true, new NullProgressMonitor()); // obviously you don't need this, it's just an example
dfile.refreshLocal(IResource.DEPTH_ZERO, null);
请参阅常见问题解答何时应使用refreshLocal?了解更多信息。
我刚刚遇到了一个类似的问题,我只想在这里分享我的见解。。。
背景:我正在使用一个GMF编辑器,并希望以编程方式添加一些节点和边。要做到这一点,"正确"的方法是添加一些创建节点和元素命令,这将创建模型元素和视图,但为了快速构建解决方案的原型,我只添加了模型元素,并让GMF自己计算节点。这对节点来说很好,但需要使用F5刷新编辑器的边。
我查看了plugin.xml
,搜索F5密钥绑定。不过,调用该命令不起作用,因为它会检查选择,而且在执行我的实际命令(创建元素的命令)时,选择显然是null
。然而,在检查之后,该命令实际所做的对我来说是有效的(刷新图表并显示新创建的元素的所有节点和边):
EObject modelElement = ((View) ((EditPart) structuredSelection
.getFirstElement()).getModel()).getElement();
List editPolicies = CanonicalEditPolicy
.getRegisteredEditPolicies(modelElement);
for (Iterator it = editPolicies.iterator(); it.hasNext();) {
CanonicalEditPolicy nextEditPolicy = (CanonicalEditPolicy) it.next();
nextEditPolicy.refresh();
}
或更短:
CanonicalEditPolicy.getRegisteredEditPolicies(modelElement)
.forEach(CanonicalEditPolicy::refresh);
当然,也就是说,假设(a)您有一个GMF编辑器,(b)您可以访问模型元素和/或编辑部分,最好是图表本身。你可以得到这样的:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();