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

问题描述 投票:0回答:2

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

我无法导入 MediaPlayer 类的问题,我尝试将

requires javafx.media;
添加到我的 module-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 javafx-11
2个回答
6
投票

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


javafx.media
是一个模块,您需要在 module-info.java 中需要它,就像您对
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;
}

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


我不建议使用

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

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-media</artifactId>
    <version>15</version>
</dependency>

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

尝试下载库 jar 但它是空的

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

此外,我认为

javafx.media
工件的命名、配置和上传到 Maven 中心的错误,这就是为什么它只作为
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 或控件,请使用此处的示例模块和依赖项名称。

使用这些模块的所有步骤与

javafx.media
模块相同,只是名称发生变化。

示例模块名称:

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

示例依赖项工件名称:

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

-1
投票

我发现我的错误,我需要从安装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 就可以识别该模块了。

© www.soinside.com 2019 - 2024. All rights reserved.