没有调用Eclipse Plugin Activator的启动方法
start method of Activator of Eclipse Plugin is not called
我正在制作一个插件以在 Eclipse 中提供首选项页面 4.x。
我在 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 or starting them。
我正在制作一个插件以在 Eclipse 中提供首选项页面 4.x。
我在 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 or starting them。