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