我正在尝试构建一个虚拟钢琴应用程序,我需要 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 模块,例如 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