JavaFX创建Media对象时触发IllegalAccessError错误求助
解决JavaFX创建Media对象时的IllegalAccessError错误
这个错误是Java模块系统的访问限制导致的:javafx.base模块默认不会将内部包com.sun.javafx开放给未命名模块(你的代码所在的模块),而Media组件的内部实现类需要访问这个包的内容,因此触发了IllegalAccessError。
针对普通Java环境(非Maven/Gradle),可以通过添加VM参数解决:
1. 编译与运行时的命令行参数
编译代码
使用javac编译时,需要指定JavaFX的模块路径并添加所需模块:
javac --module-path "你的JavaFX SDK路径/lib" --add-modules javafx.media,javafx.controls MusicPlayer.java
运行程序
运行时除了模块路径和添加模块,还要添加--add-exports参数开放内部包的访问权限:
java --module-path "你的JavaFX SDK路径/lib" --add-modules javafx.media,javafx.controls --add-exports javafx.base/com.sun.javafx=ALL-UNNAMED --add-exports javafx.media/com.sun.media.jfxmedia.locator=ALL-UNNAMED MusicPlayer
2. IDE中的配置(如果用IDE开发)
以IntelliJ IDEA为例,在运行配置的VM options中添加以下参数:
--module-path "你的JavaFX SDK路径/lib" --add-modules javafx.media,javafx.controls --add-exports javafx.base/com.sun.javafx=ALL-UNNAMED --add-exports javafx.media/com.sun.media.jfxmedia.locator=ALL-UNNAMED
额外优化建议
你的代码中fileChooser.showOpenDialog(new Stage())会新建一个空白Stage,建议替换为当前应用的主Stage(比如通过getPrimaryStage()或传入已有的窗口对象),避免出现无意义的空白窗口。
内容的提问来源于stack exchange,提问作者Balloon
相关产品推荐
相关产品推荐

