gpt4 book ai didi

eclipse e4 - 如何在值更改后注入(inject)来自 ConfigurationScope 的首选项值?

转载 作者:行者123 更新时间:2023-12-02 03:47:02 29 4
gpt4 key购买 nike

我在方法级别使用@Preference 注释来获取注入(inject)的当前偏好值:

@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 前缀时注入(inject))。

有什么想法吗?

最佳答案

我遇到了同样的问题,我是这样解决的:

@Inject
public void trackInterface(@Preference(nodePath = "/configuration/"
+ Activator.PLUGIN_ID, value = "InterfacePref") String interfaceName) {
if (interfaceName == null || interfaceName.isEmpty()) {
// Use default preference
IEclipsePreferences preferences = DefaultScope.INSTANCE
.getNode(Activator.PLUGIN_ID);
interfaceName = preferences.get("InterfacePref", "Multicast");
}
else
lblInterfaceName = interfaceName;

关于eclipse e4 - 如何在值更改后注入(inject)来自 ConfigurationScope 的首选项值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284214/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com