Не могли бы вы запустить его из пакетного файла (который зацикливается) и использовать его в System.exit (1)?
Если это так, вы можете проверить уровень ошибки в пакетном файле и, если он равен 1, вернуться к началу и перезапустить программу, но если он равен нулю, выйти из пакетного файла.
Edit:
Вы хотите вызвать «Сброс» извне (из unix?)
Если это так, мое предложение будет следующим:
- Создать параметр командной строки с именем -restart
- При запуске без командной строки откройте сокет на заранее установленном высоком порту (32123?) И прослушайте соединение как часть запуска вашего приложения.
- Когда вы получаете соединение с некоторой ключевой строкой, переданной в него, выполните System.exit (1);
- При запуске с -restart вместо обычного запуска подключитесь к этому порту, отправьте правильную строку ключа и выйдите.
- Если ваша процедура перезапуска не может подключиться, обязательно напечатайте сообщение об ошибке, говорящее, что демон не работает.
Существуют и другие способы отправки сообщения существующему процессу, но сокет, вероятно, самый простой - это всего лишь несколько строк кода. Другой - опрос о существовании файла в каком-то абсолютном месте, а также поиск PID и его уничтожение.
Сокет как дополнительное преимущество независимости от платформы.