无法使用 MediaPlayer class,未找到 javafx.media

Can not work with MediaPlayer class, javafx.media is not found

我正在尝试构建一个虚拟钢琴应用程序,我需要 MediaPlayer class 来演奏音符,我的项目是一个带有 fxml、javafx 11.0.2 和 java14.

我无法导入 MediaPlayer class 的问题,我尝试将 requires javafx.media; 添加到我的模块 - info.java 但它仍然无法识别它。 这是我的模块-info.java

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

    opens org.project to javafx.fxml;
    exports org.project;
}

也尝试下载库 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>

我的 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>

并且显示未找到存储库。

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


javafx.media 是一个模块,您需要在 module-info.java 中要求它,就像您对 javafx.controlsjavafx.fxml.[= 所做的那样28=]

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

    opens org.project to javafx.fxml;
    exports org.project;
}

可能还有其他问题,但很有可能。


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

<!-- https://mvnrepository.com/artifact/org.openjfx/javafx.media -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-media</artifactId>
    <version>15</version>
    <type>pom</type>
</dependency>

对于后来参考此 post 的读者,请使用最新的 non-early 访问版本,您可以使用 mvnrepository 或类似的搜索工具找到它。

tried to download the library jar but it is empty

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

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

My pom.xml dependencies

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

i went to file> project structure > libraries > add library "java", opened the path where i installed my javafx > lib and chose javafx.media, then module-info.java could recognize it.

您应该拥有 IDE re-import 更新的 Maven 项目和 auto-resolve 依赖项,而不是手动将库添加到 IDE 项目。

有关想法,请参阅:

  • How can I make IntelliJ IDEA update my dependencies from Maven?

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


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

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

示例模块名称:

javafx.web
javafx.swing
javafx.fxml
javafx.media
javafx.controls

示例依赖项目名称:

javafx-web
javafx-swing
javafx-fxml
javafx-media
javafx-controls

我发现我的错误,我需要从我安装 javafx 的目录添加 javafx.media,像这样 C:\Program Files\openjfx-14.0.2.1_windows-x64_bin-sdk\javafx-sdk-14.0.2.1\lib

要实现这一点,我需要转到文件 > 项目结构

然后我选择了javafx.media.jar

执行此操作后 module-info。java 可以识别模块。