无法使用 MediaPlayer 类,找不到 javafx.media

Mal*_*nas 6 javafx javafx-11

我正在尝试构建一个虚拟钢琴应用程序,我需要 MediaPlayer 类来演奏音符,我的项目是一个带有 fxml、javafx 11.0.2 和 java 14 的模块化 Maven 项目。

我无法导入 MediaPlayer 类的问题,我尝试添加requires javafx.media;到我的 module-info.java 但它无论如何都无法识别它。这是我的 module-info.java

module org.project {
    requires javafx.controls;
    requires javafx.fxml;

    opens org.project to javafx.fxml;
    exports org.project;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

还尝试下载库 jar 但它是空的。

还尝试在 pom.xml 文件中添加 Maven 依赖项,如下所示:

<!-- https://mvnrepository.com/artifact/org.openjfx/javafx.media -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx.media</artifactId>
    <version>11.0.0-ea1</version>
    <type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我的 pom.xml 依赖项:

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11.0.2</version>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11.0.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx.media -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx.media</artifactId>
        <version>15</version>
        <type>pom</type>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

它显示未找到存储库。

jew*_*sea 6

注意:这个答案也适用于其他 JavaFX 模块,例如 fxml 和 web。


javafx.media是一个模块,您需要在 module-info.java 中 require 它,就像对javafx.controls和所做的那样javafx.fxml

module org.project {
    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.media;

    opens org.project to javafx.fxml;
    exports org.project;
}
Run Code Online (Sandbox Code Playgroud)

可能还有其他问题,但这是一个可能的问题。


我不建议使用该11.0.0-ea1版本,以后有更稳定的版本。JavaFX 的最新稳定版本是 15 https://mvnrepository.com/artifact/org.openjfx/javafx-media/15,所以我建议您将其用于所有JavaFX 依赖项。

<!-- https://mvnrepository.com/artifact/org.openjfx/javafx.media -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-media</artifactId>
    <version>15</version>
    <type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

对于后来参考这篇文章的读者,请使用您可以通过 mvnrepository 或类似搜索工具找到的最新非早期访问版本。

尝试下载库 jar 但它是空的

不要对 JavaFX 依赖项执行此操作。JavaFX 需要包含本机库和 Java 库。仅下载 Jar 文件可能对您不起作用,因为您可能缺少所需的内容。另外,可能需要传递导入所需的库,同样,仅下载单个 jar 是无法实现的。您已经在 Maven 中使用依赖层次结构构建工具,只需正确配置和使用它并让它完成其工作即可。

此外,我认为该javafx.media工件的命名、配置和上传到 Maven Central 的错误,这就是为什么它只作为一个11.0.0-ea1版本存在。它应该被命名为javafx-media,它是在后续上传中使用的,因此请为工件使用正确的名称,然后就会出现最新版本,其中包括 Maven 中央存储库中的所有正确的工件数据。

我的 pom.xml 依赖项

您的 pom.xml 依赖项混合了不同 JavaFX 依赖项的 JavaFX 版本。不要这样做,不同版本将不兼容。对所有 JavaFX 依赖项使用相同版本。

我转到文件>项目结构>库>添加库“java”,打开我安装javafx>lib的路径并选择javafx.media,然后module-info.java可以识别它。

您应该让 IDE 重新导入更新后的 maven 项目并自动解析依赖项,而不是手动将库添加到 IDE 项目中。

对于想法,请参阅:

对于其他 IDE,该过程会有所不同。


如果您想使用 WebView、FXML 或 Controls,请使用此处的示例模块和依赖项名称。

使用这些模块的所有步骤与模块相同javafx.media,只是名称发生变化。

模块名称示例:

javafx.web
javafx.swing
javafx.fxml
javafx.media
javafx.controls
Run Code Online (Sandbox Code Playgroud)

依赖项名称示例:

javafx-web
javafx-swing
javafx-fxml
javafx-media
javafx-controls
Run Code Online (Sandbox Code Playgroud)