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

时间:2017-10-08 16:42:24

标签: java preferences

我想实现从默认(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中指定的文件。 为什么我无法切换首选项实施即时? 可能吗?我该如何修复我的代码?提前致谢。任何问题都将得到解答。

1 个答案:

答案 0 :(得分:1)

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

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

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

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