Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse RCP:clonePerspective返回null_Java_Eclipse_Eclipse Rcp_Perspective - Fatal编程技术网

Java Eclipse RCP:clonePerspective返回null

Java Eclipse RCP:clonePerspective返回null,java,eclipse,eclipse-rcp,perspective,Java,Eclipse,Eclipse Rcp,Perspective,我想克隆一个透视图并保存克隆的透视图。但是,对的调用返回null,我已经不知道我的参数值可能有什么问题了 public void savePerspectiveAs(String label) { IWorkbenchPage page = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); IPerspectiveDescriptor perspectiveDesc

我想克隆一个透视图并保存克隆的透视图。但是,对的调用返回null,我已经不知道我的参数值可能有什么问题了

public void savePerspectiveAs(String label) {
    IWorkbenchPage page = PlatformUI.getWorkbench()
            .getActiveWorkbenchWindow().getActivePage();
    IPerspectiveDescriptor perspectiveDescriptor = perspectiveRegistry
            .findPerspectiveWithLabel(label);

    // if the perspective doesn't exist, create a new one 
    // by cloning the current perspective
    if (perspectiveDescriptor == null) {
        IPerspectiveDescriptor currentPerspectiveDescriptor = 
                perspectiveRegistry.findPerspectiveWithId(currentPerspective);
        // after this line, perspectiveDescriptor is still null
        perspectiveDescriptor = perspectiveRegistry
                .clonePerspective(currentPerspective + "." 
                         + label.replaceAll(" ", "_"), label, 
                         currentPerspectiveDescriptor);
        // hence I get a NullPointerException here...
        connectedPerspectives.add(perspectiveDescriptor.getId());
    }
    page.savePerspectiveAs(perspectiveDescriptor);

}
所有其他值似乎都很好
currentPerspectiveDescriptor
是有效对象,
perspectiveRegistry
也是有效对象

标签
类似于
“Connected Perspective 2”
。它还不存在,我创建的透视ID也不存在


有什么想法吗?如果
clonePerspective(…)
返回null,这里会出现什么错误?

clonePerspective
在Eclipse4.x中不受支持

这是透视法的代码。clonePerspective:

public IPerspectiveDescriptor clonePerspective(String id, String label,
        IPerspectiveDescriptor desc) throws IllegalArgumentException {
    // FIXME: compat clonePerspective. Not called in 3.8
    E4Util.unsupported("clonePerspective"); //$NON-NLS-1$
    return null;
}

Eclipse的错误是

我能够在不重写e4所有内容的情况下,为“克隆”透视图找到一个解决方法。然而,这是一个相当肮脏的黑客行为,我不推荐这样做,因为它对Eclipse的实现类而不是接口使用未经检查的强制转换

@SuppressWarnings("restriction")
public void savePerspectiveAs(String label) {
    IWorkbenchPage page = PlatformUI.getWorkbench()
            .getActiveWorkbenchWindow().getActivePage();
    IPerspectiveDescriptor perspectiveDescriptor = perspectiveRegistry
            .findPerspectiveWithLabel(label);

    // if the perspective doesn't exist, create a new one 
    // by cloning the current perspective
    if (perspectiveDescriptor == null) {
        // Note: this is a dirty hack.
        // It is not recommended to cast to PerspectiveDescriptor 
        // or PerspectiveRegistry.
        PerspectiveDescriptor currentPerspectiveDescriptor =
                (PerspectiveDescriptor) perspectiveRegistry.findPerspectiveWithId(currentPerspective);
        perspectiveDescriptor =
                ((PerspectiveRegistry) perspectiveRegistry)
                        .createPerspective(label, currentPerspectiveDescriptor);
        connectedPerspectives.add(perspectiveDescriptor.getId());
    }

    page.savePerspectiveAs(perspectiveDescriptor);
}

它没有抛出异常,而是默默地记录它——这有多重要!有没有办法解决这个问题,或者我们必须等待bug修复?这个bug已经存在两年多了,所以不太可能很快被修复。您可能可以使用Eclipse4EmodelService、EPartService等做一些事情。。。就个人而言,我还没有在e4.FYI中查看透视图:我问过他们,他们告诉我,不幸的是,他们不打算在下一版本中解决这个bug。