我正在將我的 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
提交
取消