Java Java16 错误:java.lang.reflect.InaccessibleObjectException

Java Error with Java16 : java.lang.reflect.InaccessibleObjectException

现有代码在安装 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 文件被一些方法的输入参数修改(s ) 从 intlong

Reading/Writing from/to Windows 使用 Advapi32Util.java

注册表更简单

使用这个 JNA APIs 可以轻松读取注册表项、值,还可以使用新的键和值设置注册表。

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

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

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

Advapi32Util.registryGetKeys(HKEY root, String keyPath)