Linux Mint下无法运行Windows打包的JavaFX应用Jar包求助
问题:JavaFX Jar包在Linux Mint无法运行,报GtkPlatformFactory找不到错误
我在Windows系统上开发了JavaFX应用,打包生成的Jar包在Windows环境中可正常运行,但在Linux Mint系统中运行该Jar包时出现如下报错日志:
нояб. 07, 2022 3:15:00 PM com.sun.javafx.application.PlatformImpl startup WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @6a7840b4' java.lang.ClassNotFoundException: com.sun.glass.ui.gtk.GtkPlatformFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at com.sun.glass.ui.PlatformFactory.getPlatformFactory(PlatformFactory.java:42) at com.sun.glass.ui.Application.run(Application.java:146) at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:291) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:293) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) at java.base/java.lang.Thread.run(Thread.java:833) Failed to load Glass factory class Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.sun.glass.ui.PlatformFactory.createApplication()" because the return value of "com.sun.glass.ui.PlatformFactory.getPlatformFactory()" is null at com.sun.glass.ui.Application.run(Application.java:146) at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:291) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:293) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) at java.base/java.lang.Thread.run(Thread.java:833)
已在Linux系统上安装openjfx,使用的JDK版本为openjdk 17.0.4。
解决方案
- 确认OpenJFX与JDK版本匹配:检查安装的openjfx版本是否和openjdk 17.0.4兼容,不同版本可能引发依赖问题。执行
apt show openjfx查看当前版本,若不匹配则重新安装对应版本的openjfx。 - 运行Jar时指定JavaFX模块路径:使用命令行运行Jar时,明确指定JavaFX的模块路径和所需模块,示例命令:
替换java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml,javafx.graphics -jar your-app.jaryour-app.jar为实际的Jar文件名,若应用依赖其他JavaFX模块,可追加到--add-modules参数后。 - 改用模块化打包工具:如果之前采用传统非模块化打包方式,建议使用JavaFX官方的
jlink或jpackage工具重新打包,生成适配Linux的镜像或安装包,这类工具会自动包含对应平台的依赖组件,避免运行时缺失。 - 安装系统依赖库:Linux Mint可能缺少Gtk相关的底层依赖,执行以下命令安装必要组件:
sudo apt install libgtk-3-dev libgl1-mesa-glx
内容的提问来源于stack exchange,提问作者Aqua
相关产品推荐
相关产品推荐

