【问题标题】:GUI javafx app not opening via service in linuxGUI javafx应用程序未通过Linux中的服务打开
【发布时间】:2019-07-06 18:18:48
【问题描述】:

我创建了一个 GUI Javafx 应用程序并将其导出到一个 jar 文件。 GUI 应用程序运行良好。创建此应用程序后,我已将其移至 linux 系统,并且在这里运行良好。现在我想使用服务在 linux 中运行这个 GUI 应用程序,这样我就可以让这个服务在 linux 系统启动时运行。

为此,我创建了一个 pointless.sh 文件,它在运行时运行 jar 文件。它运行良好,这个 pointless.sh 文件的代码是

java -jar GUI1.jar

在运行此脚本时,即“./pointless”,GUI 将显示在屏幕上。

当我尝试为其提供服务时,问题就开始了。

我在 /etc/systemd/system pointless.service 中为它做了服务

[Service]
ExecStart=/home/mandeep/Documents/pointless.sh

运行 sudo systemctl start pointless.service 没有任何反应,状态显示以下错误。

● pointless.service
   Loaded: loaded (/etc/systemd/system/pointless.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2019-07-06 13:44:00 EDT; 25min ago
  Process: 1449 ExecStart=/home/mandeep/Documents/pointless.sh (code=exited, status=203/EXEC)
 Main PID: 1449 (code=exited, status=203/EXEC)

Jul 06 13:44:00 debian systemd[1]: Started pointless.service.
Jul 06 13:44:00 debian systemd[1449]: pointless.service: Failed at step EXEC spawning /home/mandeep/Documents/pointless.sh: Exec format error
Jul 06 13:44:00 debian systemd[1]: pointless.service: Main process exited, code=exited, status=203/EXEC
Jul 06 13:44:00 debian systemd[1]: pointless.service: Unit entered failed state.
Jul 06 13:44:00 debian systemd[1]: pointless.service: Failed with result 'exit-code'.

更新!!!

第 1 步 正如预期的那样,我创建了一个简单的 Java 应用程序 helloworld 并将其导出到 jar 文件中。我将此文件作为 java -jar helloworld 运行,它工作正常。

第 2 步 我为它创建了一个简单的服务,服务也按预期工作。 服务代码是

[Service]
ExecStart=/usr/bin/java -jar /home/mandeep/Documents/helloworld.jar

输出

Jul 07 17:08:13 debian systemd[1]: Started pointless.service.
Jul 07 17:08:13 debian java[2765]: Hello World!

第 3 步 我将服务更新回 GUI1.jar 以检查发布的原始问题。 代码

[Service]
ExecStart=/usr/bin/java -jar /home/mandeep/Documents/GUI1.jar

再次显示错误

输出

● pointless.service
   Loaded: loaded (/etc/systemd/system/pointless.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2019-07-07 17:14:37 EDT; 4s ago
  Process: 2816 ExecStart=/usr/bin/java -jar /home/mandeep/Documents/GUI1.jar (code=exited, status=1/FAILURE)
 Main PID: 2816 (code=exited, status=1/FAILURE)

Jul 07 17:14:37 debian java[2816]:         at com.sun.glass.ui.Application.run(Application.java:146)
Jul 07 17:14:37 debian java[2816]:         at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257)
Jul 07 17:14:37 debian java[2816]:         at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211)
Jul 07 17:14:37 debian java[2816]:         at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675)
Jul 07 17:14:37 debian java[2816]:         at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337)
Jul 07 17:14:37 debian java[2816]:         at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
Jul 07 17:14:37 debian java[2816]:         ... 5 more
Jul 07 17:14:37 debian systemd[1]: pointless.service: Main process exited, code=exited, status=1/FAILURE
Jul 07 17:14:37 debian systemd[1]: pointless.service: Unit entered failed state.
Jul 07 17:14:37 debian systemd[1]: pointless.service: Failed with result 'exit-code'.

【问题讨论】:

  • 在您的other post 中,您的屏幕截图截取最重要的一条信息。错误消息:Exec format error。这是一个系统错误。看这里:unix.stackexchange.com/questions/303022/… 和这里:superuser.com/questions/944244/…
  • @paulsm4 感谢您提供的信息。是的,我知道这是一个系统错误。但如何解决是个问题。你提到的帖子内容丰富,但还没有为我解决问题。
  • @paulsm4 如果您需要 jar 文件,我将不胜感激。
  • 谢谢,但我不需要 .jar 文件。建议:1) 请阅读此附加链接:stackoverflow.com/questions/21503883,2) 修改您的脚本以以 #!/bin/bash 开头,包括 Java 的完全限定路径,并回显 $PATH、$JAVA_HOME 和 $CLASSPATH。将输出复制/粘贴到您的原始帖子中。 3) 如果您仍然无法弄清楚,请编写一个 JavaFX minimal reproducible example 来重现问题并将其复制/粘贴到您的原始帖子中。
  • 好的:这是有用的信息。所以问题是 NOT 与脚本,问题是 NOT 从命令行运行脚本与从 systemd 环境运行脚本之间的区别。问:那么“有效”的 .jar 和无效的 .jar 究竟有什么区别?问:您不会尝试将 GUI 代码作为服务运行,是吗?如果是这样: Q1:为什么? Q2:您希望它如何工作?建议:我仍然推荐minimal reproducible example

标签: java linux javafx raspberry-pi debian


【解决方案1】:

找到答案

在 pointless.service 中的 [Service] 下进行以下更改

a) 使用“Environment=DISPLAY:=0

b) 声明“User=<user>

在 [Install] 下可选

c) 声明“WantedBy=<user>@.service

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多