【问题标题】:How to open any eclipse Wizard from Intro Page in eclipse plugin development如何在 Eclipse 插件开发中从介绍页面打开任何 Eclipse 向导
【发布时间】:2012-11-05 15:19:28
【问题描述】:

我的欢迎页面使用 HTML 文件。我想使用

从介绍页面打开 Eclipse 向导
href="http://org.eclipse.ui.intro/runAction?pluginId=MobileTalk&class=mobiletalk.intro.ShowPerspectiveIntroAction"

ShowPerspectiveIntroAction类中,我的代码如下:

Class c = Class.forName("tttt.ddt.plugin.project.NewTtttProjectWizard");
Wizard wizard = (Wizard) c.newInstance();
WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),wizard);
dialog.open();

但我得到了错误:classnotfound:tttt.ddt.plugin.project.NewTtttProjectWizard

如何正确地从介绍页面打开任何 Eclipse 向导?

【问题讨论】:

    标签: eclipse plugins eclipse-rcp wizard


    【解决方案1】:

    通过查看您的代码,我怀疑这是一个类加载器问题。在 Eclipse/OSGI 中使用 Class.forName 不是一种安全的做法,因为每个插件/捆绑包都使用自己的类加载器,因此很多时候会发生 Class Not Found Exceptions。更好的方法是通过执行以下操作获取包含您的向导类的 Bundle/Plugin:Platform.getBundle("com.stackoverflow.myplugindId"),它返回 Bundle 的实例。然后在 bundle 的实例上调用 .loadClass("tttt.ddt.plugin.project.NewTtttProjectWizard") ,它将使用正确的类加载器,然后一旦你有了 Class 的实例,你就可以调用 newInstance() 方法,它将解决您的 Class not found 问题。希望有所帮助,在 OSGI 环境中类加载更加复杂,因为出于安全原因,每个插件都有自己的类加载器,所以我建议不要在代码中使用 Class.forName。 - 邓肯

    【讨论】:

    • 谢谢!它可以工作,但是根据eclipse向导创建一个新项目后,我单击“完成”,向导没有关闭。当我使用 eclipse 向导在插件本身中创建一个项目时,它运行良好。这里是例外: !ENTRY org.eclipse.ui 4 0 2012-11-06 11:10:20.701 !MESSAGE 未处理的事件循环异常 !STACK 0 java.lang.NullPointerException at tttt.ddt.plugin.project.NewTtttProjectWizard.performFinish (NewTtttProjectWizard.java:130)
    • 代码为:getWorkbench().getWorkingSetManager().addToWorkingSets(proj, workingSets); // 第 130 行 @Duncan Krebs
    • 这听起来像是一个不同的问题。不确定您的向导是否扩展了 NewProject 向导。我建议为 NPE 添加一个断点,看看什么是空的,然后从那里开始。停在 NPE 或向导的 performFinish() 的第一行。 - 邓肯
    猜你喜欢
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多