Windows可运行的JavaFX JAR在Ubuntu运行时出现主类找不到错误如何解决?
解决Ubuntu下运行JavaFX JAR出现的
Error: Could not find or load main class问题 这个问题的核心原因很明确:Ubuntu默认安装的OpenJDK不包含JavaFX模块。从JDK 11开始,JavaFX就被从标准JDK中剥离,成为独立的开源项目了。你在Windows上能正常运行,大概率是因为使用的JDK自带了JavaFX(比如Oracle JDK或Azul Zulu的FX专属版本),但Ubuntu默认的OpenJDK并没有集成这部分内容。下面给你几个实用的解决办法:
方法一:更换内置JavaFX的JDK发行版
这是最省心的方案,直接换一个自带JavaFX的JDK就行,比如Azul Zulu FX或者BellSoft Liberica FX:
- 以Azul Zulu FX为例,通过官方PPA安装步骤如下:
- 添加PPA源:
sudo add-apt-repository ppa:azul/zulu-ppa sudo apt update - 安装对应版本的Zulu FX JDK(比如常用的JDK 17):
sudo apt install zulu17-fx-jdk - 切换系统默认JDK到Zulu FX:
在弹出的选项里选择Zulu FX对应的条目即可。之后直接用sudo update-alternatives --config javajava -jar your-app.jar运行,应该就能正常启动了。
- 添加PPA源:
方法二:手动指定JavaFX模块路径运行
如果你不想更换系统JDK,可以单独下载JavaFX SDK,然后在运行JAR时手动指定模块路径:
- 从OpenJFX官网下载和你开发时JDK版本匹配的Linux版JavaFX SDK,解压到固定目录,比如
/opt/javafx-sdk。 - 运行JAR时使用如下命令(替换成你的JAR文件名、主类需求的JavaFX模块和SDK路径):
java --module-path /opt/javafx-sdk/lib --add-modules javafx.controls,javafx.fxml -jar your-app.jar--module-path:指定JavaFX模块所在的lib目录--add-modules:添加你的应用实际用到的JavaFX模块(比如javafx.controls、javafx.fxml,如果用到了其他模块也要一并加上)
方法三:打包包含JavaFX的独立可执行包
如果希望你的JAR能在任何Linux环境直接运行,不用依赖系统JDK,可以用Maven或Gradle的插件把JavaFX模块和JRE一起打包:
- 比如用Maven的
javafx-maven-plugin,配置时启用jlink或jpackage目标,生成一个包含完整运行环境的独立包。这样用户拿到手直接就能运行,完全不用管系统有没有JavaFX。
额外排查小提示
- 确认你的JAR包的
MANIFEST.MF文件里正确指定了Main-Class,且这个主类确实继承了javafx.application.Application。 - 检查Ubuntu上的JDK版本,确保和你开发时使用的版本一致,避免版本不兼容导致的问题。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

