0

安装 JDK11 后,现有代码运行良好。JDK16中相同的代码行抛出错误

java.lang.reflect.InaccessibleObjectException: Unable to make private static native long[] java.util.prefs.WindowsPreferences.WindowsRegOpenKey(long,byte[],int) accessible: module java.prefs does not "opens java.util.prefs" to unnamed module @3f803fae
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)

当代码从 Java8 迁移到 Java9 时,WinRegistry.java文件被修改为一些方法的输入参数类型从intlong

4

1 回答 1

0

使用Advapi32Util.java读取/写入 Windows 注册表要简单得多

使用此 JNA API,您可以轻松读取注册表键、值,还可以使用新键和值设置注册表。

我使用以下 API 来获取注册表项的注册表值,其中注册表项的路径如下

Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, registry_path, value_of)

此外,特定路径下的子密钥可以从下面的 API 中获取

Advapi32Util.registryGetKeys(HKEY root, String keyPath)
于 2021-09-24T06:20:48.190 回答