Я пытаюсь запустить hookdown для запуска в java. Цель этого крючка - записать в файл журнала, что программа была прервана. Приложение java скомпилировано в файл jar и выполняется с использованием пакетного файла, что означает, что выход приложения переходит в окно cmd.exe. Когда это окно cmd закрыто, я хочу, чтобы приложение регистрировалось, что оно было закрыто.Проблема с запуском завершающего крюка в java
Приложение предназначено для неограниченного использования и выполнения определенных задач в определенное время. Таким образом, программа выполняет серию проверок в цикле «Пока истина». Я не понимаю, почему этот крючок не будет регистрировать, что приложение закрывается!
В основном методе мы имеем:
final Thread mainThread = Thread.currentThread();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable()
{
@Override
public void run()
{
try { mainThread.join(); }
catch (InterruptedException e) { }
mission.log("Program Closed.", true);
}
}
));
Все «миссия» есть, является экземпляром пользовательского класса моего, который делает запись данных. Когда вы вызываете метод «log», он имеет BufferedWriter и вызывает его методы .write(), .newLine() и .flush().
Я не могу получить строку «Программа закрыта» в моем файле журнала, когда я убью пакетное окно. Что я делаю не так?
Убивание серийного окна убивает процесс, оно не останавливает его изящно. –
Тогда нет ли вообще способа обнаружить пакетный файл и ввести его в журнал? Вы, кажется, говорите мне, что это невозможно вообще. – Drifter64
Я не думаю, что есть способ определить, был ли процесс убит изнутри процесса. –