Вот пример кода, который никогда не завершит sh. Все, что я делаю, это открываю файл с помощью Desktop.open (file). Программа закрывается после того, как я закрываю открытый файл (например, всплывающий текстовый редактор или файл Excel).
public static void main(String[] args) {
File file = new File("TextFile1.log");
if (file.exists()) {
Thread thread = new Thread() {
@Override
public void run() {
Desktop desktop = Desktop.getDesktop();
System.out.println("opening using desktop protocol " + desktop.toString());
try {
// Runtime.getRuntime().exec("gedit "+file);//this line of code works fine, but it is linux related
desktop.browse(file.toURI());//
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("File opened " + file.getName());
}
};
thread.start();
} else {
System.out.println("File does not exists!");
}
try {
Thread.sleep(1000L);//just so we do not exit before file is actually opened
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("End of program.");
System.exit(0);
}
Результат, который я получаю:
opening using desktop protocol java.awt.Desktop@7a8afb69
File opened TextFile1.log
End of program.
Через некоторое время я решаю чтобы закрыть открытый файл, и я также получаю следующую строку в выводе:
Process finished with exit code 0
Как я могу открыть файл без блокировки выхода и эта кроссплатформенность поддерживается?
Я заметил это на Windows также. Все на Java 8.