IPreferenceStore可以保存和获取PreferencePage的设置,可以通过Activator获取IPreferenceStore。
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
要想在PreferencePage中使用IPreferenceStore,需要在PreferencePage中先设置IPreferenceStore。
this.setPreferenceStore(Activator.getDefault().getPreferenceStore());
然后在PreferencePage中获取IPreferenceStore。
IPreferenceStore store = this.getPreferenceStore();
如果不设置的话,会报空指针异常,为什么呢?看getPreferenceStore()是如何实现的。
public IPreferenceStore getPreferenceStore() {
if (preferenceStore == null) {
preferenceStore = doGetPreferenceStore();
}
if (preferenceStore != null) {
return preferenceStore;
} else if (container != null) {
return container.getPreferenceStore();
}
return null;
}
如果不设置的话,这时preferenceStore为空,将会执行doGetPreferenceStore()方法,而该方法直接返回null。
protected IPreferenceStore doGetPreferenceStore() {
return null;
}
而container实际上是PreferenceDialog,这个类里面没有任何生成IPreferenceStore的方法,只是有get/set方法,所以也会返回null。public void setPreferenceStore(IPreferenceStore store) {
Assert.isNotNull(store);
preferenceStore = store;
}
@Override
public IPreferenceStore getPreferenceStore() {
return preferenceStore;
}