我正在尝试构建一个虚拟钢琴应用程序,我需要 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)
它显示未找到存储库。
注意:这个答案也适用于其他 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)