java - 首选项系统尝试在 "normal"用户在 Linux 上没有写入权限的位置写入锁定文件

标签 java linux preferences

我正在使用系统首选项来测试我的代码,我在 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/

相关文章:

java - 如何将列表传递到 Swing 中的初始框架

java - 从 CustomerOrder 中提取数据以显示为总销售数据

java - 为什么java编译器提示StringBuffer

linux - kubelet 失败,kubelet cgroup 驱动程序 : "cgroupfs" is different from docker cgroup driver: "systemd"

谷歌应用程序引擎上的java首选项API

Android:使用 API 级别 14 之前的 Switch Preference

java - 如何从 Avro 的 GenericRecord 中提取类型的 map ?

linux - conmand 添加和删除路由

linux - shell合并两个文件

java - 从 IntelliJ IDEA 中删除黄色类名弹出窗口(面包屑)