JavaFX 作为 MavenDependency - jar 在 Oracle JDK 上启动但不在 openJDK 上启动
JavaFX as MavenDependency - jar starts on Oracle JDK but not on openJDK
我即将完成我的硕士论文。我开发的程序是一个 maven 项目,javaFx 声明为 dependencies
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>16-ea+4</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>8.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>16-ea+4</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16-ea+4</version>
</dependency>
当我使用 Maven-install 创建 jar 时,程序在 Oracle-JDK 上运行。但是在 openJDK 它抛出一个 java.lang.ClassNotFoundException.
我的理解是,javaFX 不再包含在两个 JDK 中。这就是为什么我不使用 maven 并构建具有所有依赖项的 jar。这样它应该找到 javaFx 并启动程序,而不管使用的 JDK.
假设我的假设是正确的,错误与 javaFX 有关。
为了编译我使用 JavaSE 13 的程序。它使用 Oracle JDK 15 完美运行。但是它抛出一个 java.lang.ClassNotFoundException 使用 openJDK 14 或 15。
---编辑---
我不太确定这个错误是否被认为是 JavaFX。
我在控制台上使用
启动 jar
java -jar "C:...\test.jar"
这适用于 OracleJDK 但不适用于 openJDK。然后控制台prinst:
Error: Could not find or load main class C:\...\test
Caused by: java.lang.ClassNotFoundException: C:\...\test
我知道如何使用 IDE 打印堆栈跟踪。但是在这种情况下是否可以使用控制台打印堆栈跟踪?
如果是这样,我会编辑这个问题以提供更多信息。
非常感谢您的帮助。我慌了^^
您只向我们提供了您设置的一些片段。所以很难给出具体的建议。据我所知,我会说您的程序无法在任何不包含 JavaFX 的 Java 上运行,因为您没有在启动命令中提供所需的参数。在这里查看经过验证的正确启动 JavaFX 的方法:https://openjfx.io/openjfx-docs/
你有 MANIFEST.MF 文件吗? IT 应该指向具有您的 public static void main(String[] args) 方法的 class <-- 您的主要方法。
示例:
MANIFEST.MF
Manifest-Version: 1.0
Main-Class: classes.TestClass
有用的计算器:Could not find or load main class with a Jar File
https://taylorial.com/cs1021/Jar.htm#jarwithjavafxpackagesincluded
我的教授刚刚回复说这只是他命令行中的一个错字。
它工作得很好。
我会在 view hours 中删除这个问题,因为它不是真正的问题。
非常感谢。
我即将完成我的硕士论文。我开发的程序是一个 maven 项目,javaFx 声明为 dependencies
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>16-ea+4</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>8.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>16-ea+4</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16-ea+4</version>
</dependency>
当我使用 Maven-install 创建 jar 时,程序在 Oracle-JDK 上运行。但是在 openJDK 它抛出一个 java.lang.ClassNotFoundException.
我的理解是,javaFX 不再包含在两个 JDK 中。这就是为什么我不使用 maven 并构建具有所有依赖项的 jar。这样它应该找到 javaFx 并启动程序,而不管使用的 JDK.
假设我的假设是正确的,错误与 javaFX 有关。
为了编译我使用 JavaSE 13 的程序。它使用 Oracle JDK 15 完美运行。但是它抛出一个 java.lang.ClassNotFoundException 使用 openJDK 14 或 15。
---编辑---
我不太确定这个错误是否被认为是 JavaFX。
我在控制台上使用
启动 jarjava -jar "C:...\test.jar"
这适用于 OracleJDK 但不适用于 openJDK。然后控制台prinst:
Error: Could not find or load main class C:\...\test
Caused by: java.lang.ClassNotFoundException: C:\...\test
我知道如何使用 IDE 打印堆栈跟踪。但是在这种情况下是否可以使用控制台打印堆栈跟踪?
如果是这样,我会编辑这个问题以提供更多信息。
非常感谢您的帮助。我慌了^^
您只向我们提供了您设置的一些片段。所以很难给出具体的建议。据我所知,我会说您的程序无法在任何不包含 JavaFX 的 Java 上运行,因为您没有在启动命令中提供所需的参数。在这里查看经过验证的正确启动 JavaFX 的方法:https://openjfx.io/openjfx-docs/
你有 MANIFEST.MF 文件吗? IT 应该指向具有您的 public static void main(String[] args) 方法的 class <-- 您的主要方法。
示例:
MANIFEST.MF
Manifest-Version: 1.0
Main-Class: classes.TestClass
有用的计算器:Could not find or load main class with a Jar File
https://taylorial.com/cs1021/Jar.htm#jarwithjavafxpackagesincluded
我的教授刚刚回复说这只是他命令行中的一个错字。
它工作得很好。
我会在 view hours 中删除这个问题,因为它不是真正的问题。
非常感谢。