Java Eclipse RCP:clonePerspective返回null
我想克隆一个透视图并保存克隆的透视图。但是,对的调用返回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
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。