我在方法级别使用@Preference 注释来获取注入的当前首选项值:
@Inject
@Optional
public void updatePrefValue(@Preference(value = PREFERENCE_NAME) String prefValue) {
System.out.println("updatePrefValue with '" + prefValue + "'.");
this.prefValue = prefValue;
if (lblPrefValue != null && !lblPrefValue.isDisposed()) {
lblPrefValue.setText(prefValue);
}
}
在几个地方(例如vogella和 Marc Teufel 和 Jonas Helming 博士的 Eclipse 4 一书中)已经说过,当偏好值更改时,会再次调用此方法。
因此,在按下设置新首选项值的按钮后
IEclipsePreferences node = ConfigurationScope.INSTANCE.getNode(PREFERENCES_NODE);
node.put(PREFERENCE_NAME, txtNewPrefValue.getText());
try {
node.flush();
} catch (BackingStoreException e1) {
e1.printStackTrace();
}
我会假设该方法再次被调用。这是真的,但前提是我不更改 ConfigurationScope 而是更改 InstanceScope。
InstanceScope.INSTANCE.getNode(PREFERENCES_NODE).put(PREFERENCE_NAME, txtNewPrefValue.getText());
该示例的完整源代码可以在github上查看。
是否有可能做到这一点?或者它是一个错误?
亲切的问候,托鲍曼
更新: 如果我指定 nodePath 包括注释的范围(/configuration/...)
@Inject
@Optional
public void updatePrefValue(@Preference(nodePath = "/configuration/" + PREFERENCES_NODE, value = PREFERENCE_NAME) int intPrefValue) {
System.out.println("updatePrefValue with '" + intPrefValue + "'.");
this.intPrefValue = intPrefValue;
if (lblPrefValue != null && !lblPrefValue.isDisposed()) {
lblPrefValue.setText(String.valueOf(intPrefValue));
}
}
然后如果 ConfigurationScope 中的首选项值发生变化,则再次调用该方法。仍然不能合理使用,因为第一次调用此方法时,参数为 null(如果我想设置字符串值)或 0(如果我想设置整数值)。我认为发生这种情况是因为在 ConfigurationScope 中(还)找不到该值。您希望在这里拥有的值是来自 DefaultScope 的值(之前我不使用 /configuration 作为 nodePath 前缀时注入的值)。
有任何想法吗?