You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:27:02