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

Java setProperty()在运行时不起作用,java,preferences,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.systemNode

我想实现从默认(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中指定。 为什么我不能动态切换首选项实现?
可能吗?如何修复我的代码?提前谢谢。任何问题都会得到回答。

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

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

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

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