1、前言
在gradle中运行main方法突然出现如下错误
Exception in thread "main" java.lang.IllegalAccessError: class XXX.util.ImageBorderUtils (in unnamed module @0x4bd4bcd4) cannot access class sun.font.FontDesignMetrics (in module java.desktop) because module java.desktop does not export sun.font to unnamed module @0x4bd4bcd4
at XXX.util.ImageBorderUtils.main(ImageBorderUtils.java:51)
看报错是资源访问不了,因为用了jdk9之后的jdk版本,会有访问问题,但是我写main方法又不是模块,知道要加jvm参数,但我用的gradle,就很迷茫,怎么设置参数。
2、环境
JDK:17
依赖管理工具:gradle
IDE:IDEA 2023.1.1
3、解决过程
在main方法上,点击Modify Run Configuration
点击Modify options
勾选Add VM options
增加参数:–add-exports java.desktop/sun.font=ALL-UNNAMED
将导包有问题的包,暴露为全部未命名模块的可访问(这里是翻译参数意思)。
最后点确定,应用配置,回去点运行即可,正常运行。
4、设置界面的模块表达
这里主要解释一下idea表达当前是模块的一些说明。
他有一个no module的选项,虽然有,但是选择,下面的实现类变红,所以这个必选的。必须选一个模块module
前一个jdk版本,则默认选中模块声明的jdk
这种情况可能是我项目问题,我项目是个多模块的项目。
参考博客:
jdk11中获取Font类字体宽度
idea jdk8编译报错 Error:java: 无效的标记: --add-exports