Запустите jar при запуске Linux из Java
Я хочу запустить файл JAR при запуске. Так что я упоминал здесь. Я выполнил шаги вручную, как указано Сорока, то есть, используя автозапуск, и это работало без проблем. Но я попробовал то же самое в Java, т.е. от создания скрипта до копирования файла в /etc/xdg/autostart
, Все файлы созданы безопасно и нет исключений или ошибок. Но мой файл jar не запускается при запуске.
Содержание скрипта следующее:
#!/bin/bash
### BEGIN INIT INFO
# Provides: testscript.sh
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
java -jar /home/user/Documents/Parthe/StartupTest/Start.jar
Содержимое файла.desktop выглядит следующим образом:
[Desktop Entry]
Name=test
Exec=/usr/bin/testscript.sh
Type=Application
Terminal=false
Ява-программа, которую я использовал для создания этих файлов, выглядит следующим образом:
private void writeScript() {
File f = new File("/usr/bin/testscript.sh");
if (!(f.exists())) {
try {
f.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
bw.write("#!/bin/bash");
bw.newLine();
bw.newLine();
bw.append("### BEGIN INIT INFO");
bw.newLine();
bw.append("# Provides: testScript");
bw.newLine();
bw.append("# Required-Start: $remote_fs $syslog");
bw.newLine();
bw.append("# Required-Stop: $remote_fs $syslog");
bw.newLine();
bw.append("# Default-Start: 2 3 4 5");
bw.newLine();
bw.append("# Default-Stop: 0 1 6");
bw.newLine();
bw.append("# Short-Description: Start daemon at boot time");
bw.newLine();
bw.append("# Description: Enable service provided by daemon.");
bw.newLine();
bw.append("### END INIT INFO");
bw.newLine();
bw.newLine();
bw.append("java -jar /home/user/Documents/Parthe/StartupTest/Start.jar");
bw.newLine();
bw.flush();
bw.close();
} catch (IOException ex) {
Logger.getLogger(TestStartup.class.getName())
.log(Level.SEVERE, null, ex);
}
}
writeDesktopFile();
}
private void writeDesktopFile() {
JOptionPane.showMessageDialog(null, "inside Write Desktop");
File f = new File("/usr/share/applications/test.desktop");
if (!(f.exists())) {
try {
f.createNewFile();
JOptionPane.showMessageDialog(null, "File created");
BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
bw.write("[Desktop Entry]");
bw.newLine();
bw.append("Name=test");
bw.newLine();
bw.append("Exec=/usr/bin/testscript.sh");
bw.newLine();
bw.append("Type=Application");
bw.newLine();
bw.append("Terminal=false");
bw.flush();
bw.close();
moveFile();
} catch (IOException ex) {
Logger.getLogger(TestStartup.class.getName())
.log(Level.SEVERE, null, ex);
}
}
}
private void moveFile() {
try {
Process p = Runtime.getRuntime().exec("cp "
+ "/usr/share/applications/test.desktop "
+ "/etc/xdg/autostart/");
Runtime.getRuntime().exec("chmod +x /usr/bin/testScript");
} catch (IOException ex) {
Logger.getLogger(TestStartup.class.getName())
.log(Level.SEVERE, null, ex);
}
}
Файл jar, который должен запускаться при запуске, содержит оператор печати и диалоговое окно с сообщением Joptionpane, оба из которых выводят "Success".