У меня есть файл jar, который мне нужно выполнить при перезагрузке системы.
Файл JAR делает две вещи
Я могу выполнить файл jar и выполнить обе задачи, когда добавляю запись с помощью crontab -e, как показано ниже, и перезагружаюсь.
@reboot sleep 60 && /home/username/Desktop/run.sh
run.sh
#!/bin/sh
export DISPLAY=:0
/home/username/Downloads/jre8/jre1.8.0_191/bin/java -jar /home/username/Desktop/test.jar
Мое требование - мне нужно сделать это программно. Итак, для тестирования я добавил файл в / etc / cron.d с именем run, который имеет следующие строки
@reboot root sleep 60 && /home/username/Desktop/run.sh
и перезагрузил систему.
Оба файла run.sh и run имеют разрешение + x, данное с помощью chmod.
Jar выполняется и создает файл примера, но не показывает всплывающее окно.
Java-код работающего фляги показан ниже
FileWriter fw = new FileWriter("/home/username/Desktop/abc.txt");
PrintWriter pw = new PrintWriter(fw);
pw.print("test");
pw.close();
fw.close();
JFrame parent = new JFrame();
JOptionPane.showMessageDialog(parent,"Test pop-up");
System.exit(0);
Есть идеи, почему я не могу открыть всплывающее окно?
Я работаю на Ubuntu 18.04 с использованием Oracle VM Virtual Box.
Спасибо за ваше время и помощь!
+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++
Обновление:
Мне удалось заставить всплывающее окно отображаться при перезагрузке, используя зарегистрированного пользователя в файле /etc/cron.d/run
@reboot username sleep 120 && /home/username/Desktop/run.sh
Кроме того, изменен всплывающий код в банке, как показано ниже
JFrame frame = new JFrame("Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
Но я хочу иметь возможность запускать его как root, поэтому при изменении записи обратно на
@reboot root sleep 120 && /home/username/Desktop/run.sh
всплывающее окно не отображается, создается только файл.