Java 自EclipseJuno以来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 到 现在透视图不再切换,在调试中没有异常,也没有任

在我的RCP应用程序中,我使用以下代码切换透视图:

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,其中一个与透视切换有关
对于这三点,我不能说是因为Eclipse4平台还是Eclipse3兼容层。我希望专门为新的Eclipse4平台开发的新应用程序能够正确运行

所以我的解决方案是定义一个Eclipse3目标并将其用于构建。

以下是完整的程序:

  • 安装JDK 7(32位版本)
  • 安装Eclipse3.7(32位版本)
  • 安装Eclipse4(32位版本)
  • 启动Eclipse4并导入所需的项目
  • 转到窗口/首选项/插件开发/目标平台
  • 单击“添加”,然后单击“无”
  • 单击“添加”,然后单击“安装”,并选择Eclipse3.7目录
  • 创建目标后,选择它(仍在窗口/首选项/插件开发/目标平台中)
  • 现在,在您的
    .product
    中,“Eclipse产品导出向导”将构建一个Eclipse3可执行文件

    实用说明:

    • “全部清除”是不够的,我必须停止/重新启动Eclipse,以便在选择目标后使其工作
    • 安装过程删除了my
      .product
      字段中的一些内容。我必须重新设置ID并检查“产品包含本地laucher工件”

      • 我也遇到了这个问题。据我所知,这是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));