为了账号安全,请及时绑定邮箱和手机立即绑定

Maven JavaFx 项目编译但从控制台运行给出“缺少 JavaFX 应用程序类”错误消息

Maven JavaFx 项目编译但从控制台运行给出“缺少 JavaFX 应用程序类”错误消息

一只甜甜圈 2022-07-06 19:05:02
我正在将我的 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>我通过包含文档中描述的 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 示例中的配置。没有任何效果。有任何想法吗?
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

我在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


正如这里所解释的,为了创建一个包含所有必需的 JavaFX 依赖项的可运行 jar,您将需要使用一个不从 Application.js 扩展的启动器类。


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 366 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信