Java setProperty()在运行时不起作用
我想实现从默认(Windows HKCU)到我自己(文件系统)的首选项迁移。所有东西都是分开工作的,但不能一起工作: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
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
类中工厂的初始化代码)