2010-08-26 2 views
3

Возможные Дубли:
How to implement a single instance Java application?
How do I make sure only one instance of my program can be executed?Java - позволяют только один раз экземпляр приложения

Что такое хороший и простой способ для достижения этой цели? Я читал методы, связанные с привязкой к порту. Будет ли это мешать другим приложениям, используя тот же метод?

+2

дублирующее сообщение как: http://stackoverflow.com/questions/177189/how-to-implement-a-single-instance-java-application –

ответ

3

Неправильно связываться с портом. Попробуйте запустить приложение и сбросить сетевой адаптер, посмотрите, что произойдет. Другие приложения также могут использовать этот порт.

Я думаю, что лучше реализовать блокировку внешнего ресурса, такого как файл, но нужно позаботиться: если перезагрузка ПК или что-то в этом роде, необходимо будет обнаружить устаревшие блокировки.

Вы уже проверили проекты Apache или JBoss? Уверен, что библиотека должна сделать это правильно.

1

Только если они используют один и тот же порт, и есть много портов. Просто не используйте одну из обычных.

Некоторые программы также будут использовать какой-либо файл блокировки. Таким образом, второй экземпляр не запускается, если он существует.

0

Общая концепция заключается в том, что вы определяете порт TCP, а затем связываете (слушатель/сервер) с ним при запуске приложения. Если вы не связываетесь с ним, то знаете, что еще один экземпляр вашего приложения уже запущен.

Если другое приложение использует один и тот же порт для чего-то другого (или для той же цели), то это не удастся. Таким образом, имеет смысл использовать порт в файле конфигурации, который существует вне вашего исполняемого файла, так что он может быть настроен на использование того, который еще не используется на рассматриваемой машине.

0

Вы действительно можете связать ServerSocket с конкретным портом TCP/IP. Если этот порт уже используется, bind выдает IOException.

Этот метод не будет мешать другим приложениям, использующим тот же метод, если другое приложение не откроет один и тот же порт (порты TCP/IP идентифицируются по 16-разрядному номеру). Поэтому вы должны выбрать номер фиксированного порта и надеяться, что нет других приложений, которые случайно используют один и тот же номер порта.

Обратите внимание, что в Windows вы можете использовать команду netstat, чтобы узнать, какие порты используются, с какими исполняемыми файлами.

Смежные вопросы