Привет У меня есть автономное приложение, в котором при входе пользователя в файл abc.lck создается, когда приложение закрыто, оно удаляется. Я использовал addshutdownhook(), чтобы удалить файл при подаче питания прерывается, что отключает источник питания, когда мое приложение работает. Моя проблема заключается в том, что файл не удаляется, когда я вручную отключает систему, то есть при запуске -> выключение, и я должен пригласить пользователя с помощью сообщения изменения с помощью cofirm dailog окна как в MS Word.Can нибудь помочь мне Поблагодарив U ChaithuОбработка события завершения работы
ответ
Используйте deleteOnExit метод ИНСТ объявление добавления shutdownhook. Тем не менее, обратите внимание на эту sample,
class Shutdown {
private Thread thread = null;
protected boolean flag=false;
public Shutdown() {
thread = new Thread("Sample thread") {
public void run() {
while (!flag) {
System.out.println("Sample thread");
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException ie) {
break;
}
}
System.out.println("[Sample thread] Stopped");
}
};
thread.start();
}
public void stopThread() {
flag=true;
}
}
class ShutdownThread extends Thread {
private Shutdown shutdown = null;
public ShutdownThread(Shutdown shutdown) {
super();
this.shutdown = shutdown;
}
public void run() {
System.out.println("Shutdown thread");
shutdown.stopThread();
System.out.println("Shutdown completed");
}
}
public class Main {
public static void main(String [] args) {
Shutdown shutdown = new Shutdown();
try {
Runtime.getRuntime().addShutdownHook(new ShutdownThread(shutdown));
System.out.println("[Main thread] Shutdown hook added");
} catch (Throwable t) {
System.out.println("[Main thread] Could not add Shutdown hook");
}
try {
Thread.currentThread().sleep(10000);
} catch (InterruptedException ie) {}
System.exit(0);
}
}
Общий договор addShutdown крючок
Виртуальная машина Java выключается в ответ на два вида событий:
Программа как правило, при выходе последней нитевой нити или при вызове метода выхода (эквивалентно, System.exit) или
Th виртуальная машина завершается в ответ на прерывание пользователя, например, набирает^C или общесистемное событие, такое как выключение пользователя или выключение системы.
Отключенный крюк - это просто инициализированная, но неуправляемая нить. Когда виртуальная машина начнет свою последовательность выключения, она запустит все зарегистрированные крючки отключения в некотором неуказанном порядке и позволит им запускать одновременно. Когда все крючки закончены, он будет запускать все неинвинированные финализаторы, если финализация на выходе будет включена. Наконец, виртуальная машина остановится. Обратите внимание, что потоки демона будут продолжать работать во время последовательности выключения, так же как и потоки не-демона, если выключение было инициировано вызовом метода exit.
В редких случаях виртуальная машина может прервать работу, то есть прекратить работу, не отключаясь полностью. Это происходит, когда виртуальная машина завершается извне, например, с сигналом SIGKILL в Unix или вызовом TerminateProcess в Microsoft Windows. Кроме того, виртуальная машина может прервать работу, если родной метод пойдет наперекосяк, например, повреждая внутренние структуры данных или пытаясь получить доступ к несуществующей памяти. Если виртуальная машина прерывается, то не может быть гарантирована, будут ли выполняться какие-либо выключения.
Следовательно, во время выключения компьютер Windows может вызывать TerminateProcess, и, следовательно, ваш крюк отключения может не вызываться.
+1 большое объяснение по последовательности отключения JVM. –
Видимо, это то, что происходит, когда вы завершаетесь от затмения, потому что крюк вообще не называется! –
- 1. Весенняя интеграция: приложение завершения работы, когда обработка файлов завершена
- 2. Есть ли какие-либо события после завершения работы SQL Server?
- 3. Обработка после завершения запроса
- 4. Обработка после завершения работника
- 5. Изменение сценария завершения работы
- 6. Ждите завершения работы контура
- 7. Задание. После завершения работы до завершения Задачи
- 8. Обнаружение события завершения консоли
- 9. Дождитесь завершения COM-события
- 10. Функция вызова Hammer.js после завершения события завершения
- 11. продвижение после завершения работы без работы
- 12. JavaServiceWrapper: приложение не ждет завершения работы
- 13. Обработка сигнала завершения программы GLib?
- 14. RACCommand отдельная обработка успешного завершения
- 15. отладочная обработка без завершения отладки
- 16. Обработка очереди работы IntentSevice
- 17. Обработка работы Azure Web
- 18. сети аварийного завершения работы программы
- 19. BackgroundJobs прекращение работы после завершения
- 20. имеет процесс VB.net завершения работы
- 21. Обнаружение ожидающего завершения работы Linux
- 22. Пауза до завершения работы функции
- 23. Прилагаемые события: обработка MenuItem.Click
- 24. jQuery обработка дескриптора события
- 25. обработка объекта события календаря
- 26. Обработка события VScrollbar Paint
- 27. Обработка DataGrid Обновление События
- 28. обработка события в qtruby
- 29. Обработка обучающего события
- 30. Обработка события в угловом
Ваше приложение работает на ноутбуке или машине с источником бесперебойного питания (ИБП)? – Will
на машине без сбоев, и проблема заключается в ручном отключении – chaithu