有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在页面关闭后以编程方式调用EclipseF5刷新

我一直试图在eclipse中以编程方式调用refresh(F5),并得到一个NotHandledException,handler not found错误。非常感谢您的帮助

在我的类中:NewPreferencePage扩展PreferencePage实现IWorkbenchReferencePage 我有以下代码:

@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();
    }
}

共 (2) 个答案

  1. # 1 楼答案

    你可以使用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);
    

    有关更多信息,请参见FAQ When should I use refreshLocal?

  2. # 2 楼答案

    我刚刚遇到了一个类似的问题,我想在这里分享我的见解

    背景:我正在使用一个GMF编辑器,希望以编程方式添加一些节点和边。“正确的”方法是添加一些create node和element命令,这将同时创建模型元素和视图,但为了快速原型化解决方案,我只添加了模型元素,让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();