vanesxl
@vanesxl

Как запретить выполнять несколько экземпляров программы?

Здравствуйте, написал программу, собрал в jar файл. Но это приложение может запускаться в нескольких экземплярах, как можно запретить это делать?
Заранее большое спасибо!
  • Вопрос задан
  • 1352 просмотра
Пригласить эксперта
Ответы на вопрос 3
angry_cellophane
@angry_cellophane
Используй скрытый файл как лок: при запуске программы смотришь, если файл есть, закругляемся и выходим, иначе создаем файл и продолжаем. Только есть 2 момента:
1. Если 2 инстанса программы были запущены практически одновременно, оба могут не найти файл и попытаться создать его, поэтому лучше проверять этот случай:
File file = new File("<your_path_here>");
if (!file.createNewFile) {
   System.out.pprintln("The instance is already running");
   return;
}

2. Использовать try-finally или shutdown hook, чтобы удалить файл.
Ответ написан
Комментировать
Я применяю подход, косвенным эффектом которого является блокировка параллельно запущенных приложений.

1. В файле настроек храните номер сетевого свободного порта, например 5555
2. При старте программы поднимайте ServerSocket и слушайте этот порт на localhost

Я использую этот приём, чтобы правильно погасить уже запущенную программу, запустив её ещё раз с параметром STOP. В таком случае запущенная программа отправляет на localhost:5555 команду прекращения работы. Что считывается через ServerSocket и программа аккуратно завершается.

Побочным эффектом этого подхода является то, что запустить второй экземпляр программы (без параметра STOP) не получится, так как она попытается открыть ServerSocket по этому-же порту (5555).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы