当前位置: 首页 > 知识库问答 >
问题:

如何在JDK 17中解决Field.setAccess的InaccessObjectException?

谢麒
2023-03-14

有了JDK17,就不可能再使用反射来访问字段了,至少java.lang-类是不可能的。以下代码段:

final Process process = new ProcessBuilder().directory(new File("d:/temp")).command("cmd.exe").start();
final Field handleField = process.getClass().getDeclaredField("handle");
handleField.setAccessible(true);

失败,并显示:

Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make field private final long java.lang.ProcessImpl.handle accessible: module java.base does not "opens java.lang" to unnamed module @254989ff
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
    at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)

有办法解决这个问题吗?

共有1个答案

祁高格
2023-03-14

正如此答案所指出的,一种解决方案是添加以下VM选项:

java --add-opens java.base/java.lang=ALL-UNNAMED
 类似资料:
  • 问题内容: 联接操作可以正常工作,但是当我重用df2时,我面临着无法解析的属性错误 错误:org.apache.spark.sql.AnalysisException:已解析的属性ID#426 问题答案: 正如我在评论中提及,它关系到https://issues.apache.org/jira/browse/SPARK-10925,更具体地说https://issues.apache.org/ji

  • 我试图读取xlsx格式的excel文件。但是我得到的结果太大,无效的句柄异常。我把文件实例在一个FileInputStream对象,并试图在XSSFWorkbook中设置该对象。但是我得到了这个例外。 我工作的环境中没有安装Microsoft office,并且有开放式office。我没有在open office中编辑我的xlsx文件。但我在open office中打开了文件,然后尝试运行poi代

  • 问题内容: 我必须参加具有一对多关系的课程。当我尝试访问延迟加载的集合时,出现·。我在网上搜索了一段时间,现在我知道我得到了异常,因为用于加载保存集合的类的会话已关闭。但是我没有找到解决方案(或者至少我不理解它们)。基本上我有那些课: User UserRepository UserService Job JobRepository JobService App 我经常读到会话必须绑定到当前线程,

  • 错误-mssql08(系统找不到指定的文件)java.io.FileNotFoundException:mssql08(系统找不到指定的文件)在java.io.FileInputStream.Open0(本机方法)

  • 问题内容: 我在应用程序MySQL 5.7中使用,并且具有JSON列。当我尝试运行集成测试时,由于H2数据库无法创建表,因此无法进行测试。这是错误: 这是实体类。 和子类: 并将此转换器插入数据库: 问题答案: 提出问题后,H2添加了JSON支持,版本为1.4.200(2019-10-14)。 但是,您很少需要在数据库中使用JSON数据类型。JSON本质上只是一个可能很长的字符串,因此您可以使用大

  • 我正在开发一个简单的JavaFX程序HelloFX。我用ant执行诸如构建或启动之类的任务。我对此没有任何问题,它可以完美地工作,因此代码和库在build.xml中链接良好,正如您在代码中看到的那样。 但是,VSCode找不到JavaFX,并表示导入javafx无法解析。所以我想知道VSCode如何找到Java依赖关系?他怎么能像蚂蚁一样找到JavaFX呢?我认为VSCode使用build.xml