JavaFX 21:尽管Maven依赖中已包含javafx-media,仍然抛出ClassNotFoundException: javafx.media.MediaView

编程语言 2026-07-09

我正在用Maven和 module-info.java 开发一个JavaFX 21桌面应用。我最近在我的 pom.xml 中添加了 javafx-media 依赖来显示后台视频,但应用在运行时失败,错误如下:

Caused by: java.lang.ClassNotFoundException: javafx.media.MediaView
    at [email protected]/javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:3062)
    ...

我的环境:

  • Java版本: 21.0.10
  • JavaFX版本: 21.0.2
  • 构建工具: Maven
  • IDE: IntelliJ IDEA 2025.3.2

我的 pom.xml 依赖:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>${javafx.version}</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>${javafx.version}</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-media</artifactId>
    <version>${javafx.version}</version>
</dependency>

我的 module-info.java

module com.plasticstock {
    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.media;
    requires java.sql;

    opens com.plasticstock to javafx.fxml;
    opens com.plasticstock.controllers to javafx.fxml;
    opens com.plasticstock.models to javafx.base;

    exports com.plasticstock;
    exports com.plasticstock.controllers;
    exports com.plasticstock.models;
}

我尝试过的做法:

  1. 确认 javafx-media 已正确下载并能在 “External Libraries” 中看到。
  2. 多次执行 mvn clean install
  3. 使IntelliJ的缓存失效并重启。
  4. 尝试将 --add-modules javafx.media 添加到VM选项,但在引导层初始化时导致 java.lang.module.FindException: Module javafx.media not found

看起来 FXMLLoader 在运行时无法访问 javafx.media 模块,尽管它已在 module-info.java 中声明。

问题: 如何正确配置一个模块化的JavaFX Maven项目,使在运行时能够正确识别 javafx-media 模块,而不触发 FindExceptionClassNotFoundException

解决方案

javafx.media 模块中没有名为 javafx.media.MediaView 的类。实际的类名是 javafx.scene.media.MediaView

你的 ClassNotFoundException 是由一个 FXMLLoader 抛出的。这表明加载器认为它解析出了正确的类名,但在通过反射加载类时失败了。这意味着你很可能在某个FXML文件中有如下错误的导入:

<?import javafx.media.MediaView?>

修正该导入后,ClassNotFoundException 应该会消失。


另一个问题是 FindException。要找出原因,我们需要一个最小可复现示例(minimal reproducible example)。具体来说,我们需要看到完整的POM,以及运行应用程序所使用的命令。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章