如何在Linux系统启动时运行JavaFX GUI应用程序
JavaFX GUI应用随Linux系统启动自动运行问题
我有一个包含所有依赖的JavaFX fat jar包,在Linux环境下可通过以下命令正常运行:
/usr/lib/jvm/jdk-17/bin/java -jar /home/my_user/application.jar
现在需要实现该应用随系统启动自动运行,已尝试以下两种方法但均失败:
方法1:使用xdg autostart桌面文件
在/etc/xdg/autostart/目录下创建startup.desktop文件,内容如下:
[Desktop Entry] Type=Application Name=JavaApplication Exec=/usr/lib/jvm/jdk-17/bin/java -jar /home/my_user/application.jar
重启系统后应用未启动。
方法2:使用systemd服务
创建my_startup.service文件,内容如下:
[Unit] Description=Sample application autostart After=graphical.target After=network-online.target Wants=network-online.target [Service] Type=simple User=my_user WorkingDirectory=/home/my_user ExecStart=/usr/lib/jvm/jdk-17/bin/java -jar /home/my_user/application.jar [Install] WantedBy=multi-user.target
执行启用命令:
sudo systemctl enable my_startup.service
查看服务状态:
sudo systemctl status -l my_startup.service
结果显示启动失败,状态信息如下:
× my_startup.service - Sample application autostart Loaded: loaded (/etc/systemd/system/my_startup.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2023-12-13 10:02:55 CET; 1h 13min ago Process: 684 ExecStart=/usr/lib/jvm/jdk-17/bin/java -jar /home/my_user/application.jar (code=exited, status=1/FAILURE) Main PID: 684 (code=exited, status=1/FAILURE) CPU: 572ms dec 13 10:02:55 my_user java[684]: at com.sun.glass.ui.Application.run(Application.java:146) dec 13 10:02:55 my_user java[684]: at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:290) dec 13 10:02:55 my_user java[684]: at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:293) dec 13 10:02:55 my_user java[684]: at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) dec 13 10:02:55 my_user java[684]: at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) dec 13 10:02:55 my_user java[684]: at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679) dec 13 10:02:55 my_user java[684]: at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) dec 13 10:02:55 my_user java[684]: at java.base/java.lang.Thread.run(Thread.java:833) dec 13 10:02:55 my_user systemd[1]: my_startup.service: Main process exited, code=exited, status=1/FAILURE dec 13 10:02:55 my_user systemd[1]: my_startup.service: Failed with result 'exit-code'.
修复方案
方案1:修正xdg autostart桌面文件
桌面文件格式存在错误,需调整换行并补充必填项,修改后的/etc/xdg/autostart/startup.desktop内容如下:
[Desktop Entry] Type=Application Name=JavaApplication Exec=/usr/lib/jvm/jdk-17/bin/java -jar /home/my_user/application.jar Terminal=false Hidden=false X-GNOME-Autostart-enabled=true
保存文件后重启系统,应用即可随桌面环境启动。
方案2:修正systemd服务配置
JavaFX GUI应用需要图形环境变量支持,修改my_startup.service文件如下:
[Unit] Description=Sample application autostart After=graphical.target After=network-online.target Wants=network-online.target graphical.target [Service] Type=simple User=my_user WorkingDirectory=/home/my_user Environment=DISPLAY=:0 Environment=XAUTHORITY=/home/my_user/.Xauthority ExecStart=/usr/lib/jvm/jdk-17/bin/java -jar /home/my_user/application.jar [Install] WantedBy=graphical.target
执行以下命令重新加载并启用服务:
sudo systemctl daemon-reload sudo systemctl enable my_startup.service
重启系统后,通过systemctl status my_startup.service确认服务状态。
内容的提问来源于stack exchange,提问作者Syzak
相关产品推荐
相关产品推荐

