eclipse - Eclipse Plugin的Activator的start方法没有被调用

标签 eclipse eclipse-plugin eclipse-rcp

我正在制作一个插件来在 Eclipse 4.x 中提供 Preference Page。

我在 Vogella-Preferences 上遵循了本教程.

页面的问题是,在我输入一次值,然后退出,然后重新打开首选项后,值没有保留。可能的原因可能是未指定 PreferenceStore。

以下是偏好页面的代码:

import com.varun.preference.main.Activator;

public class EASEPreferences extends FieldEditorPreferencePage 
                implements IWorkbenchPreferencePage {

    public EASEPreferences(){
        super(GRID);
    }

    @Override
    public void init(IWorkbench workbench) {

        setPreferenceStore(getPreferenceStore());
//      setPreferenceStore(Activator.getDefault().getPreferenceStore());
        setDescription("Final Implementation");
    }

    @Override
    protected void createFieldEditors() {

        addField(new DirectoryFieldEditor("PATH", "Get &Default Keystore:",
                getFieldEditorParent()));

        addField(new BooleanFieldEditor("BOOLEAN_VALUE",
            "&Automatically run scripts that are not signed(Not Recommended)", 
            getFieldEditorParent()));
    }
}

现在,代码正在运行,偏好页面可见,但未保存。

如果我取消注释第二行 init 方法并先注释,则错误提示

java.lang.NullPointerException at com.varun.preference.page_final.EASEPreferences.init(EASEPreferences.java:24)

Activator.java 如下

public class Activator extends AbstractUIPlugin {

    public static Activator plugin;
    public static BundleContext context;

    public Activator() {
    }

    @Override
    public void start(BundleContext context){

        Activator.context = context;
        System.out.println("---InStart---");
        plugin = this;
    }

    @Override
    public void stop(BundleContext context){

        Activator.context = null;
    }

    public static Activator getDefault(){

        return plugin;
    }

}

在这里,我假设 start 方法在运行插件时没有被调用,因为 println 语句没有被打印出来。

我是否缺少 Activator 的某些内容?

我的 Manifest.mf 文件是:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Final
Bundle-SymbolicName: com.varun.preference.page.final;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: VARUN
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime
Bundle-Activator: com.varun.preference.main.Activator

我没有使用任何产品或功能。这是一个简单的插件。

Eclipse 版本:4.5.2

谢谢。

最佳答案

您的问题是您没有检查:MANIFEST.MF 配置中加载其中一个类时激活此插件。检查添加:

Bundle-ActivationPolicy: lazy

到你的 MANIFEST.MF 然后一切正常。

当您拥有 Bundle-ActivationPolicy:lazy 时,这意味着您不必显式启动您的捆绑软件,这是一件好事。在 Eclipse 中,您希望尽可能地懒惰地做事,而启动一个包就是一个很好的例子。

阅读更多关于 tracking lifecyles 的信息或 starting them .

关于eclipse - Eclipse Plugin的Activator的start方法没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234565/

相关文章:

eclipse - 资源不在 Java 项目的构建路径上

Eclipse RCP : Command visibleWhen for a dynamic List of Perspectives

java - 崩溃后不要关闭应用程序

android - 导入现有的 Android 项目,eclipse 弹出错误消息

eclipse - Gradle + Buildship - 在 JAR 和项目之间切换依赖关系

java - 如何从 Eclipse 插件提供 Flash 策略文件?

java - Skype for Business 核心/插件 Java API

java - 如何找到控件失去焦点的原因

java - 使用 Gradle 导出 jar 时出现 Firestore 依赖项问题

java - 如何从 eclipse 项目中获取文件的内容