NetBeans环境下JavaFX使用Media类引发应用崩溃问题求助
问题解决方案
你遇到的问题由两个原因共同导致:一是Java 9+模块化系统的默认权限限制,javafx.graphics模块未将内部工具包导出给非模块化项目使用;二是Media对象的初始化时机早于JavaFX运行环境启动时机。可按以下步骤修复:
- 调整Media初始化位置
不要将Media对象作为Application类的成员变量直接实例化,需移动到start()方法内部,确保JavaFX运行环境完全启动后再加载多媒体资源,修改后的代码示例如下:
public class NewFXMain extends Application { // 删掉此处原来的Media初始化代码 @Override public void start(Stage primaryStage) { // 先初始化多媒体资源 Media media = new Media(new File("C:\\ProjectImages\\baby.mp3").toURI().toString()); MediaPlayer bgPlayer = new MediaPlayer(media); bgPlayer.setCycleCount(MediaPlayer.INDEFINITE); // 设置循环播放背景音乐 bgPlayer.play(); // 原有代码保持不变 final int SCENE_WIDTH=600, SCENE_HIGHT=600; final double GRAVITY=200, FORCE=200; Pane canvas=new Pane(); Group root = new Group(); // ...其余原有代码保持不变 } // 其余类代码保持不变 }
- 配置NetBeans运行VM参数
在NetBeans项目列表右键点击你的项目 -> 选择「属性」 -> 进入「运行」选项卡 -> 在「VM选项」输入框中填入以下参数:
--add-modules javafx.media --add-exports javafx.graphics/com.sun.glass.utils=ALL-UNNAMED
如果后续运行仍提示其他模块访问权限错误,可追加以下参数:
--add-exports javafx.base/com.sun.javafx.event=ALL-UNNAMED --add-exports javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED
注意:如果你的项目是模块化项目(根目录存在module-info.java文件),则不需要添加上述VM参数,直接在module-info.java中添加requires javafx.media;即可。
- 校验JavaFX组件版本一致性
确保你项目引入的javafx.media依赖版本和其余JavaFX组件(javafx.graphics、javafx.controls等)版本完全一致,版本不匹配也会触发类访问异常。
内容的提问来源于stack exchange,提问作者NewProgramer
相关产品推荐
相关产品推荐

