如何在页面关闭后以编程方式调用Eclipse F5 Refresh



我一直试图在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();

最新更新