不调用Eclipse插件的Activator的start方法

时间:2016-05-15 04:28:56

标签: eclipse eclipse-plugin eclipse-rcp

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

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

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

以下是Preference Page:

的代码
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

感谢。

1 个答案:

答案 0 :(得分:9)

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

Bundle-ActivationPolicy: lazy

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

当你有Bundle-ActivationPolicy: lazy时,这意味着你不必明确地启动你的捆绑,这是一件好事。在Eclipse中,您希望尽可能多地懒散地工作,并且启动捆绑包就是一个很好的例子。

详细了解tracking lifecylesstarting them