我正在使用系统首选项来测试我的代码,我在 java 1.5 上观察到一些奇怪的事情
private void loadEmptyPreferences() throws IOException,
InvalidPreferencesFormatException, BackingStoreException {
ClassLoader contextClassLoader = Thread.currentThread()
.getContextClassLoader();
InputStream stream = contextClassLoader
.getResourceAsStream("example.xml");
if (stream == null) {
fail("Could not load preferences file");
}
Preferences pref = Preferences.systemRoot().node("test");
pref.removeNode();
Preferences.importPreferences(stream);
}
我明白了
java.lang.SecurityException:无法锁定系统首选项。锁定文件访问被拒绝。 在 java.util.prefs.FileSystemPreferences.checkLockFile0ErrorCode(FileSystemPreferences.java:919) 在java.util.prefs.FileSystemPreferences.lockFile(FileSystemPreferences.java:908) 在 java.util.prefs.FileSystemPreferences.removeNode(FileSystemPreferences.java:656)
原因是首选项系统尝试在 Linux 上“普通”用户没有写权限的位置写入锁定文件 (/opt/j2se/linux/ix86/j2se_1.5.0_22/jre/.systemPrefs/.system.lock)
如何解决这个问题?我们应该使用属性吗?
最佳答案
Preferences.systemRoot()
返回系统范围(即仅限 root)首选项。非特权用户无法更改它们。
如果您需要更改普通用户的设置,请尝试使用userRoot()
。
关于java - 首选项系统尝试在 "normal"用户在 Linux 上没有写入权限的位置写入锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6211048/