使用OpenAuth库时无法访问java.base模块类的问题求助
错误原因与解决方案:superclass access check failed(OpenAuth库场景)
错误原因
这个错误源于Java 9及以上引入的**模块系统(JPMS)**访问限制:
sun.net.www.protocol.https.Handler是java.base模块中的内部非公开API,不属于Java标准公开接口范畴。- OpenAuth库的
fr.litarvan.openauth.microsoft.LoginFrame$2类直接继承了该内部类,但你的应用运行在未命名模块中,而java.base模块默认不会将sun.net.www.protocol.https包导出给未命名模块,因此触发访问检查失败。
解决方法
方法1:添加JVM启动参数绕过模块检查
启动程序时,添加以下JVM参数,强制让java.base模块将目标包导出给未命名模块:
--add-exports java.base/sun.net.www.protocol.https=ALL-UNNAMED
若后续出现其他类似内部API访问错误,可参照此格式添加对应--add-exports参数。
方法2:升级OpenAuth库到适配模块化的版本
检查OpenAuth库的最新版本,若开发者已更新代码替换了对内部API的依赖(改用Java公开API实现),直接升级到该版本即可从根源解决问题。
方法3:手动修改反编译后的代码(若自行修改过库代码)
如果是通过jadx反编译并修改了OpenAuth的代码,可替换sun.net.www.protocol.https.Handler的使用:
- 改用Java标准的
HttpsURLConnection处理HTTPS请求,或者使用Java 11+提供的HttpClientAPI,这些都是公开且受支持的接口,避免依赖内部API。
内容的提问来源于stack exchange,提问作者LearningJava
相关产品推荐
相关产品推荐

