Java 自EclipseJuno以来RCP应用程序中的切换透视图?
在我的RCP应用程序中,我使用以下代码切换透视图:Java 自EclipseJuno以来RCP应用程序中的切换透视图?,java,eclipse,eclipse-rcp,eclipse-indigo,eclipse-juno,Java,Eclipse,Eclipse Rcp,Eclipse Indigo,Eclipse Juno,在我的RCP应用程序中,我使用以下代码切换透视图: IWorkbenchWindow window = getViewSite().getWorkbenchWindow(); window.getWorkbench().showPerspective(PRODUCT_PERSPECTIVE_ID, window); 我没有改变我的代码,但是我改变了我的开发环境 java 6 64bits + windows + Eclipse Indigo 到 现在透视图不再切换,在调试中没有异常,也没有任
IWorkbenchWindow window = getViewSite().getWorkbenchWindow();
window.getWorkbench().showPerspective(PRODUCT_PERSPECTIVE_ID, window);
我没有改变我的代码,但是我改变了我的开发环境
java 6 64bits + windows + Eclipse Indigo
到
现在透视图不再切换,在调试中没有异常,也没有任何可疑的可见内容
我没有发现任何错误报告
有什么解释吗?解决方法?以下是一个旨在澄清和解决我的问题的答案: 使用Eclipse4IDE,构建一个在Eclipse4之前开发的RCP应用程序,该应用程序集成了Java7功能并与Windows32位兼容。当然,你也可以转换视角 这个答案并不能解决那些希望在RCP应用程序中切换透视图并使用新的Eclipse4平台(不要与Eclipse4IDE混淆)的特性或外观的人的问题。但我不推荐它,至少对于一个旧的应用程序(在Eclipse 3上开发的),考虑到:
- 这太慢了,以至于应用程序几乎无法使用
- 有许多图形故障
- 有一些bug,其中一个与透视切换有关
.product
中,“Eclipse产品导出向导”将构建一个Eclipse3可执行文件
实用说明:
- “全部清除”是不够的,我必须停止/重新启动Eclipse,以便在选择目标后使其工作
- 安装过程删除了my
字段中的一些内容。我必须重新设置ID并检查“产品包含本地laucher工件”.product
- 我也遇到了这个问题。据我所知,这是Juno(4.2.0)中的一个回归。我使用调试器逐步完成了对showPerspective()的调用。在任何时候都没有任何明确的尝试来实际改变这个观点。可能缺少内部事件侦听器,或者showPerspective()到新框架的端口不完整
作为一种解决方法,以下代码成功地为我更改了透视图:
IWorkbenchWindow window = getViewSite().getWorkbenchWindow();
IPerspectiveRegistry registry = workbench.getPerspectiveRegistry();
IWorkbenchPage page = window.getActivePage();
page.setPerspective(registry.findPerspectiveWithId(PRODUCT_PERSPECTIVE_ID));
根据进行这些调用的上下文,您可能希望对其中的一些调用进行空保护,或者检查
Workbench.isClosing()
以确保安全。这是一个bug,已针对定于6月发布的Eclipse Luna修复。谢谢。这不是我为我的程序选择的解决方案,我做了我在回答中所写的,因为朱诺太多了,太丑了,今天无法投入生产。但是你的回答似乎很好,可能对其他人有用,所以我最终接受了它:)@dystroy谢谢你的接受。我和你得出了相同的结论:4.x版本仍然太多bug,一点问题都没有。我实际上是在使用这里提供的变通方法,因为Luna还没有正式发布,使用它会产生其他bug。
IWorkbenchWindow window = getViewSite().getWorkbenchWindow();
IPerspectiveRegistry registry = workbench.getPerspectiveRegistry();
IWorkbenchPage page = window.getActivePage();
page.setPerspective(registry.findPerspectiveWithId(PRODUCT_PERSPECTIVE_ID));