Ответ 1
Используйте Runtime.getRuntime().addShutdownHook(Thread)
.
Можно ли написать метод, который System.exit вызовет при завершении программы?
Используйте Runtime.getRuntime().addShutdownHook(Thread)
.
Крюки выключения - это ответ... вот статья о них. Они не имеют проблем (некоторые из них обсуждаются в статье).
Вы можете использовать крюк выключения.
http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread)
Обратите внимание, что прерывания выключения не будут выполняться, если VM прерывается анормально или вызывается Runtime.halt(int).
Посмотрите на крючки выключения, см. http://docs.oracle.com/javase/8/docs/technotes/guides/lang/hook-design.html
Вы можете добавить Завершение работы VM.