gpt4 book ai didi

Java setProperty() 在运行时不起作用

转载 作者:行者123 更新时间:2023-11-30 02:21:47 25 4
gpt4 key购买 nike

我想实现从默认(Windows HKCU)到我自己的(文件系统)的首选项迁移。一切都分开工作,但不能一起工作:

public static void main(String[] args){

try {

for(String s : Preferences.systemNodeForPackage(MyPreferences.class).node(myNode).keys()){
sysHashMap.put(s, Preferences.systemNodeForPackage(MyPreferences.class).node(myNode).get(s, null));
logger.info("moving key " + s + " from system");
}
} catch (BackingStoreException ex) {
java.util.logging.Logger.getLogger(PreferenceManager.class.getName()).log(Level.SEVERE, null, ex);
}

//then I want to switch to my own implemented preferences
System.setProperty("java.util.prefs.PreferencesFactory", FilePreferencesFactory.class.getName());
//here if I print System.getProperty - I see that property is set to what I want
AppPreferences myNewPreferences = new Preferences();
myNewPreferences.addEntry("key1", "value1");//sets the value to the registry - i.e. old implementation
}


}

如果我注释掉“for”循环 - 一切都会按预期进行,键值将写入 FilePreferencesFactory 中指定的文件中。为什么我无法即时切换首选项实现?是否可以?我该如何修复我的代码?提前致谢。有任何问题都会得到解答。

最佳答案

一个老问题,但对于任何感兴趣的人来说:

您的自定义首选项工厂仅在您设置系统属性 java.util.prefs.PreferencesFactory 时使用在调用systemRoot()之前或userRoot() (或者,在您的情况下通过 systemNodeForPackage() 间接执行它们)。

否则要使用的工厂类已经设置为默认值,并且只能设置一次。

(请参阅 java.util.prefs.Preferences 类中工厂的初始化代码)。

关于Java setProperty() 在运行时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46633514/

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