gpt4 book ai didi

java - Maven JavaFx 项目编译但从控制台运行给出 "Missing JavaFX application class"错误消息

转载 作者:行者123 更新时间:2023-12-02 01:38:23 25 4
gpt4 key购买 nike

我正在将我的 Maven JavaFX 应用程序从 Java 8 迁移到 Java 11。我将 pom.xml 中的插件更新为最新的(兼容 Java 11 的)插件。编译运行良好,在“目标”文件夹下的正确目录中为我提供了 jar 以及所有依赖项和模块,但是当我尝试运行 jar 文件时,我收到了可怕的“缺少 JavaFX 应用程序类”错误。无论我如何尝试更改插件配置 - 我总是收到此错误消息,并且应用程序将无法运行。

现在,更多发现:1. 主类确实驻留在类下的正确文件夹和 jar 中。2. Manifest 文件位于正确的位置,并且包含主类属性(在 Java 8 下工作正常)。

这是相关部分

<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>11</source>
<release>11</release>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
<compilerVersion>11</compilerVersion>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>7.0</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>false</addClasspath>
<mainClass>${mainClass}</mainClass>
</manifest>
<manifestEntries>
<JavaFX-Application-Class>${mainClass}</JavaFX-Application-Class>
</manifestEntries>
</archive>
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-libs</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/libs</outputDirectory>
<includeScope>runtime</includeScope>
<excludeGroupIds>org.openjfx</excludeGroupIds>
</configuration>
</execution>
<execution>
<id>copy-modules</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/mods</outputDirectory>
<includeScope>runtime</includeScope>
<includeGroupIds>org.openjfx</includeGroupIds>
</configuration>
</execution>
</executions>

我通过包含 JavaFX 模块来运行 jar,如文档中所述:

java -verbose --module-path ../mods \
--add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.swing \
-jar jar-file-name.jar \
package.class.MainClass

令我沮丧的是,我尝试了无数的配置,包括使用 JavaFx Java 11 示例中的配置。什么都不起作用。

有什么想法吗?

最佳答案

我在 https://github.com/javafxports/openjdk-jfx/issues/236 找到了解决方法.

此解决方法包括创建一个新的常规(非 Java Fx)类,该类将成为 Jar 的主类,并且该类将启动基于原始 JavaFx 的应用程序类。

这是我找到解决方法的链接中的新类:

public class Main {

public static void main(String[] args) {
HelloFX.main(args);
}
}

希望这对某人有帮助。我不会将此答案标记为正确的答案,因为它是一种解决方法,而不是真正的解决方案。

编辑:事实证明,JavaFX 文档中描述的解决方法如下:https://openjfx.io/openjfx-docs/#modular

As explained here, in order to create a runnable jar with all the required JavaFX dependencies, you will need to use a launcher class that doesn't extend from Application.

关于java - Maven JavaFx 项目编译但从控制台运行给出 "Missing JavaFX application class"错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54861520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com