cron作业在重新启动时无法正确执行Java jar

时间:2019-01-09 11:53:39

标签: swing jar cron jframe ubuntu-18.04

我有一个jar文件,需要在系统重新引导时执行。

jar文件有两件事

  • 在桌面上创建带有一些文本的示例文件

  • 使用秋千对话框显示弹出窗口

当我使用crontab -e如下所示添加条目并重新启动时,我能够执行jar文件并执行这两个任务。

@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文件都具有使用chmod授予的+ x权限。

该jar执行并创建一个示例文件,但不显示任何弹出窗口。

可运行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);

任何想法,为什么我无法显示弹出窗口? 我正在使用Oracle VM Virtual Box在Ubuntu 18.04上运行。

感谢您的时间和帮助!

++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++

更新: 通过使用/etc/cron.d/run文件

中的登录用户,我设法使弹出窗口在重新启动时显示。
@reboot username sleep 120 && /home/username/Desktop/run.sh

此外,如下所示修改了jar中的弹出代码

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

弹出窗口不显示,仅创建文件。

0 个答案:

没有答案