JavaFX鼠标点击场景播放音频出现IllegalAccessError问题求助
问题原因及解决方案
原因
这个IllegalAccessError是Java模块系统的权限限制导致的:
- JavaFX的
javafx.base模块默认不会将内部包com.sun.javafx暴露给未命名模块(如果你的项目没有定义module-info.java,就属于未命名模块)。 - 负责媒体定位的
com.sun.media.jfxmedia.locator.Locator类需要访问com.sun.javafx.PlatformUtil这个内部工具类,但模块系统阻止了这种跨模块的内部API访问,因此触发错误。
解决方案
1. 添加VM运行参数(最直接的解决方式)
在项目运行配置中添加以下VM参数,允许未命名模块访问javafx.base的内部包:
--add-exports javafx.base/com.sun.javafx=ALL-UNNAMED
如果你的项目是模块化项目(有module-info.java),将ALL-UNNAMED替换为你的模块名称即可。
2. 确保JavaFX与JDK版本匹配
如果你的JavaFX SDK版本和使用的JDK版本不兼容,也可能引发这类内部API访问异常。请确认两者版本一致(比如都用JavaFX 17和JDK 17)。
3. 模块化项目的额外配置(可选)
如果采用模块化开发,可在module-info.java中显式声明依赖并开放访问:
module your.module.name { requires javafx.media; requires javafx.base; opens your.package.name to javafx.media; // 若媒体资源在你的包内,需要开放给javafx.media访问 }
内容的提问来源于stack exchange,提问作者Xellic
相关产品推荐
相关产品推荐

