Приложение javafx с графическим интерфейсом не открывается через службу в Linux - PullRequest
2 голосов
/ 06 июля 2019

Я создал приложение Javafx с графическим интерфейсом и экспортировал его в файл jar. Приложение с графическим интерфейсом работает нормально. После создания этого приложения я переместил его в систему Linux, и он работает нормально здесь. Теперь я хочу запустить это приложение с графическим интерфейсом в Linux, используя сервисы, чтобы я мог запустить этот сервис при запуске системы Linux.

Для этого я создал файл pointless.sh, который при запуске запускает файл jar. Отлично работает код для этого файла pointless.sh

java -jar GUI1.jar

при запуске этого скрипта, т. Е. "./Pointless" GUI отображается на экране. enter image description here

Проблема начинается, когда я пытаюсь создать для нее службу.

Я сделал сервис для этого в / 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'.

1 Ответ

1 голос
/ 08 июля 2019

Нашел ответ

Внесены следующие изменения в разделе [Сервис] в pointless.service

а) используйте "Environment=DISPLAY:=0"

б) объявить "User=<user>"

и в [Install] необязательно

в) объявить "WantedBy=<user>@.service"

...