Необходимость для перезапуска приложения является признаком плохого дизайна.
Я бы очень постарался, чтобы иметь возможность "переинициализировать" приложение (перечитать файлы конфигурации, восстановить соединения или что-то еще).когда-либо) вместо того, чтобы заставлять пользователя завершать / запускать приложение (даже если это делается автоматически).
Наполовину «взломать» будет заключаться в том, чтобы инкапсулировать ваше приложение в некоторый класс бегуна, который реализует нечто вроде
public class Runner {
public static void main(String... args) {
while (true) {
try {
new YourApplication().run();
return;
} catch (RestartException re) {
}
}
}
}