Eclipse添加了一个新向导:扩展点不起作用

时间:2013-10-09 11:55:16

标签: eclipse eclipse-plugin eclipse-rcp

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

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

我正在尝试做什么:当您单击“新建”时在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

任何有任何线索的人

  • 我没有任何警告或错误
  • 在所有
  • 运行时,我的控制台中没有输出
  • 我也无法在该屏幕的“文件&gt;新&gt;其他......”下找到向导?

我还尝试使用以下设置创建一个新的示例项目“File&gt; New&gt; Plug-in Project”:

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

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

最后说明:我通过打开“plugin.xml”文件,“概述”,“启动Eclipse应用程序”来运行应用程序。

谢谢!


编辑:按要求,这里是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);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题

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

解决方案

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