重启IntelliJ IDEA后Java程序无法运行 报InaccessibleObjectException错误
报错详情
重启IntelliJ IDEA后原有Java程序无法正常运行,抛出内部调用异常,完整错误信息如下:
Internal error (java.lang.reflect.InaccessibleObjectException): Unable to make protected void java.util.ResourceBundle.setParent(java.util.ResourceBundle) accessible: module java.base does not "opens java.util" to unnamed module @1b1473ab java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.util.ResourceBundle.setParent(java.util.ResourceBundle) accessible: module java.base does not "opens java.util" to unnamed module @1b1473ab 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) at com.intellij.util.ReflectionUtil.makeAccessible(ReflectionUtil.java:253) at com.intellij.util.ReflectionUtil.getDeclaredMethod(ReflectionUtil.java:270) at com.intellij.DynamicBundle.(DynamicBundle.java:28) at org.jetbrains.jps.incremental.scala.InitialScalaBuilder.getPresentableName(InitialScalaBuilder.scala:26) at org.jetbrains.jps.incremental.IncProjectBuilder.lambda$sendElapsedTimeMessages$3(IncProjectBuilder.java:451) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.concurrent.ConcurrentHashMap$EntrySpliterator.forEachRemaining(ConcurrentHashMap.java:3652) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at org.jetbrains.jps.incremental.IncProjectBuilder.sendElapsedTimeMessages(IncProjectBuilder.java:454) at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:425) at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:183) at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:132) at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:302) at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:132) at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:219) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at java.base/java.lang.Thread.run(Thread.java:831)
错误根因
该错误由Java 9及以上版本引入的JPMS(Java平台模块系统)强封装限制导致:IDEA内部依赖的Scala编译插件通过反射调用java.util.ResourceBundle的非公开方法时,java.base模块默认未向未命名模块开放java.util包的访问权限,因此触发权限校验失败。
排查与解决步骤
- 修改IDEA自定义VM参数
打开IDEA顶部菜单 -> 帮助 -> 编辑自定义VM选项,在打开的.vmoptions配置文件末尾添加以下两行参数:
保存文件后完全关闭IDEA,再重启程序生效。--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED - 处理冲突的Scala插件
打开IDEA设置 -> 插件,找到Scala插件:- 如果项目未使用Scala技术栈,直接禁用该插件后重启IDEA即可
- 如果项目需要使用Scala,将插件升级到和当前IDEA版本匹配的最新版后重试
- 校验项目JDK配置
打开项目结构设置 -> 项目设置 -> 项目,确认项目SDK、语言级别配置和之前运行正常时的配置一致,同时检查对应模块的SDK配置没有被意外改动。 - 清空IDEA缓存重启
若以上操作都无效,执行顶部菜单 -> 文件 -> 清除缓存并重启,选择清除并重启选项,清空IDEA增量构建缓存后重新编译项目即可。
内容的提问来源于stack exchange,提问作者just_a_learner
相关产品推荐
相关产品推荐

