【问题标题】:Eclipse add a new wizard: extension points not workingEclipse 添加新向导:扩展点不起作用
【发布时间】:2013-10-09 11:55:15
【问题描述】:

我查看了几个地方,但似乎无法理解为什么我的代码不起作用。我遵循的每一个教程都是一样的,对我来说,看起来我正在做我需要做的事情......

我也没有收到任何警告或错误,所以人们会猜测它有效。

我正在尝试做的事情:单击“新建”时在 Eclipse 中添加一个向导。据我所知(我对它很陌生),我需要创建一个新的插件项目,我需要在我的 plugin.xml 文件中定义一些扩展。我还需要添加我所有的依赖项。

这是我的 plugin.xml 中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
    <extension point="org.eclipse.ui.actionSets">
    </extension>
    <extension point="org.eclipse.ui.newWizards">
        <category
            id="test.myNewWizard"
            name="Custom false new wizard">
        </category>
        <wizard
            category="test.myNewWizard"
            class="test.NewAppWizard"
            icon="icons/logo_16px.png"
            id="test.NewAppWizard"
            name="New Testing Test">
        </wizard>
    </extension>
</plugin>

如前所述:我没有收到任何警告或错误(控制台甚至不打印任何内容),这意味着应该找到所有类和图标。它们也都存在于同一个项目中。

我的MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: NewAppwizard
Bundle-SymbolicName: test.myNewWizard;singleton:=true
Bundle-Version: 1.0.0.qualifier
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.resources,
 org.eclipse.ui.ide,
 org.eclipse.core.runtime,
 org.eclipse.core.databinding,
 org.eclipse.core.databinding.beans,
 org.eclipse.core.databinding.observable,
 org.eclipse.core.databinding.property,
 org.eclipse.jface.databinding,
 com.ibm.icu
Bundle-RequiredExecutionEnvironment: JavaSE-1.6

任何知道原因的人

  • 我没有收到任何警告或错误
  • 我的控制台在运行时根本没有输出
  • 我在那个屏幕的“文件 > 新建 > 其他...”下也根本找不到向导?

我还尝试使用以下设置创建一个新示例项目“文件 > 新建 > 插件项目”:

  • 生成激活器:否
  • 此插件将对 UI 做出贡献:是的
  • 是否要创建富客户端应用程序:否

“下一步”、“使用其中一个模板创建插件:”并使用模板“带有多页编辑器的插件”。那个也使用了一个 Sample New Wizard,但是当我在创建它之后立即运行它时,即使这个也没有显示 Wizard 选项。

最后说明:我通过打开“plugin.xml”文件、“Overview”、“Launch an Eclipse application”来运行应用程序。

谢谢!


编辑:按照要求,这里是我的test.NewAppWizard 类的内容:

package test;

import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;

public class NewAppWizard extends Wizard implements INewWizard {
    private CreateAppPage firstPage;

    public NewAppWizard() {
        super();
        setNeedsProgressMonitor(true);
        setWindowTitle("Test");
    }

    @Override
    public void addPages() {
        firstPage = new CreateAppPage();
        addPage(firstPage);
    }

    @Override
    public void init(IWorkbench workbench, IStructuredSelection selection) {}

    @Override
    public boolean performFinish() {
        return false;
    }

    @Override
    public boolean canFinish() {
        return false;
    }
}

为了完整,这里还有我的CreateAppPage 类:

package test;

import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

public class CreateAppPage extends WizardPage {
    private Text testName;
    private Composite container;
    private KeyListener pageComplete;

    public CreateAppPage() {
        super("Create a new application");
        setTitle("Create a new application");
        pageComplete = new PageCompleteKeyListener();
    }

    @Override
    public void createControl(Composite parent) {
        container = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        container.setLayout(layout);
        layout.numColumns = 2;
        Label lblTestName = new Label(container, SWT.NONE);
        lblTestName.setText("Application name:");
        testName = new Text(container, SWT.BORDER | SWT.SINGLE | SWT.FILL);
        testName.addKeyListener(pageComplete);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        testName.setLayoutData(gd);
        setControl(container);
        setPageComplete(false);
    }

    public String getName() {
        return testName.getText();
    }

    private class PageCompleteKeyListener implements KeyListener {
        public void keyPressed(KeyEvent e) {}
        public void keyReleased(KeyEvent e) {
            if (testName.getText().isEmpty()) {
                setErrorMessage("Name cannot be empty");
                setPageComplete(false);
            } else {
                setErrorMessage(null);
                setPageComplete(true);
            }
        }
    }
}

【问题讨论】:

  • 你的test.newAppWizard类包含什么?
  • 我在问题中添加了它
  • 您找对地方了吗。对于“多页编辑器”示例,我在“新建/选择向导”对话框中的“示例向导”下列出了该向导。您的原件将位于“自定义虚假新向导”下
  • 我知道,这很奇怪!我正在创建示例项目并运行它,但我仍然只能在“文件 > 新建 > 选择向导”下获得标准类别和选项。任何地方都没有“自定义虚假新向导”,也没有“示例向导”。

标签: eclipse eclipse-plugin eclipse-rcp


【解决方案1】:

问题

Eclipse 运行时,您的插件似乎未激活。 因此,您的向导没有显示在列表中。

解决方案

  1. 打开您的插件清单 (MANIFEST.MF)。
  2. 在“概览”页面的“常规信息”部分中选中在加载其中一个类时激活插件

【讨论】:

  • 您,先生/女士,是英雄,成就了我的一天。谢谢大家。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2015-04-11
相关资源
最近更新 更多