我正在将我的 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 扩展的启动器类。
添加回答
举报
0/150
提交
取消