Unable to make {member} accessible: module {A} does not 'opens {package}' to {B} java11初次接触

自己本身要写一个javafx小工具,因为要使用的mybatis框架来连接数据库,但因为很久没有写纯java环境了,所以今天遇到了个小问题准备记录一下

环境:idea

框架:javafx+mybatis+java(非spring框架)

版本:java11+mysql8

代码其实就是一个mybatis的demo 无任何多余操作

这里主要要讲述的是错误,当代码执行到要去查询的sql时,会出现一个错误

 根据这个错误,我找一下网上的原因 大多是讲述这是一种错误叫法:

Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}

错误的大概意思是 java.base 包没有开放到任意模块下,而模块又通过反射使用了一些包内的属性值,这样的操作是不允许的。这种情况一般在使用高于 Java 8 版本的 JDK 时会出现,原因是在 Java 9 及之后的版本对源码进行了模块化重构,public 不再意味着完全开放,而是使用了 export 的机制来更细粒度地控制可见性。

问题大概就是版本升级一些老的反射获取属性方式发生了修改,java保护源码能力改变。需要手动来模块化

网上给的解决方法是在启动时添加jvm启动参数:

  --add-opens java.base/java.math=ALL-UNNAMED

而我用javafx开发程序的时候项目中有一个module-info.java 的文件,需要将要外部自己写的java依赖添加到这个里面才可以正常被jvm使用

 我对jvm底层了解不是很深,所以这块具体jvm底层原理还不清楚,但是知道的是我mybatis在查询数据之后返回对象无法封装到SysDict这个对象然后报错。于是我在module-info.java中添加了这个模块,之后就成功返回数据。

posted @   始终不过一场繁华  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示