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

JavaFX添加MediaView触发IllegalAccessError问题求助

解决JavaFX集成MediaView时的IllegalAccessError问题

嘿,我帮你梳理下这个问题的核心原因和解决办法,你遇到的这个错误其实是JavaFX模块化加载冲突导致的:

问题根源分析

你的启动命令里有个关键失误:同时在classpath和--module-path中包含了JavaFX的jar文件。JavaFX 13是完全模块化的框架,当你把javafx.media.jar放到classpath时,它会被加载到「未命名模块」里,而不是作为正式的javafx.media模块运行。这种情况下,它没法访问javafx.graphics模块中未对外公开的内部包com.sun.javafx.sg.prism,于是就抛出了IllegalAccessError。

具体解决方案

1. 清理Classpath中的JavaFX依赖

把classpath里所有JavaFX相关的jar都删掉,包括:
javafx-swt.jar、javafx.base.jar、javafx.controls.jar、javafx.fxml.jar、javafx.graphics.jar、javafx.media.jar、javafx.swing.jar、javafx.web.jar

这些jar已经通过--module-path指定了,完全不需要重复放到classpath里。

2. 明确添加javafx.media模块到启动参数

在--add-modules里加上javafx.media,毕竟你用到了MediaView,必须加载这个模块才能正常工作。

修正后的完整启动命令

"C:\Program Files\Java\jdk-13\bin\java.exe" 
--module-path "C:/Program Files/Java/javafx-sdk-13/lib" 
--add-modules javafx.controls,javafx.fxml,javafx.graphics,javafx.media 
--add-reads javafx.base=ALL-UNNAMED 
--add-reads javafx.graphics=ALL-UNNAMED 
-Djava.library.path=C:\Germaneers\JavaWorkspace\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App\lib 
"-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.2\lib\idea_rt.jar=58845:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.2\bin" 
-Dfile.encoding=UTF-8 
-classpath "C:\Germaneers\JavaWorkspace\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App\out\production\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App;C:\Germaneers\JavaWorkspace\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App\lib\kotlin-stdlib.jar;C:\Germaneers\JavaWorkspace\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App\lib\kotlin-reflect.jar;C:\Germaneers\JavaWorkspace\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App\lib\kotlin-test.jar;C:\Germaneers\JavaWorkspace\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App\lib\kotlin-stdlib-jdk7.jar;C:\Germaneers\JavaWorkspace\19-AU-EE74-001-Kombianzeige-im-Schwarzdruck-App\lib\kotlin-stdlib-jdk8.jar" 
main.Main

3. 可选:推荐使用模块化项目结构

如果你的项目是模块化的,在module-info.java里添加对javafx.media的依赖:

module your.module.name {
    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.media;
    
    // 若主类在该模块下,需要导出对应包或声明模块为open
    exports main;
}

这样启动时可以简化--add-modules参数,只需要指定你的模块名就行。

为什么之前的尝试没生效?

升级到JavaFX 13方向是对的,但你没解决核心的「模块加载冲突」——classpath里的JavaFX jar干扰了模块化加载流程,导致javafx.media没以模块身份运行,自然没法访问其他模块的内部API。

内容的提问来源于stack exchange,提问作者Crainko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:08:35