Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Количество одновременно запущенных приложений |
Автор: suomi 21.11.2006, 01:44 |
Вопрос всегда мучал, как отслеживать количество запущенных GUI-приложений, ну и естно сократить это число жо одного, так что при повторном запуске появилась масага в диалоге - мол приложение запущено уже! |
Автор: powerOn 21.11.2006, 10:32 |
При запуске программы проверяй наличие какого-нибудь файла-метки. Если файл есть, то выдавай сообщение, что мол программа уже запущена... и завершай прогу. Если файл-метка отсутствует, то создавай его и продолжай работу. В конце работы программы удали файл-метку. |
Автор: LSD 21.11.2006, 11:38 |
Или слушать некий порт. |
Автор: Metal_Heart 21.11.2006, 12:48 |
powerOn, у твоего метода есть нехорошее место, а именно: прога не успела удалить файл метку (сбой проги, сбой jvm, отключили электричество и т.д.) Тогда такие ситуации придется описывать в инструкции, типа "ручное восстановление ..." Это я к тому, что вариант LSD намного безопаснее ![]() |
Автор: Metal_Heart 21.11.2006, 15:29 | ||
только проверять доступность порта - тоже не хорошо, я бы реализовал это так: зарезервировал диапазон портов и при старте их все перебирал, а затем, если копий проги нет, в первый доступный порт засылал бы некоторые данные, идентифицирующие себя. Ну, а если при старте проги в каком-то порту есть данные идентифицирующие первый экземпляр проги, то выдавал бы соотв. сообщение вот ![]() |
Автор: w1nd 21.11.2006, 15:37 |
Порты - это вообще не хорошо. А если у человека совсем отсутствует сетевой интерфейс и службы (включая loopback ![]() Файл - надежнее. Только проверять нужно не его наличие, а блокировку. Eclipse использует именно такой способ и проблем с этим не было ни разу. |
Автор: suomi 21.11.2006, 17:15 |
LSD, хороший вариант! А вот примерчик можно привести, кто должен прослушивать порт - сервер или клиент ? И как определить наличие что программа уже запущена, просто ждать ответа от кого-то или как ? |
Автор: Metal_Heart 21.11.2006, 17:18 |
suomi, как сам придумаешь так и будет ![]() ![]() ![]() |
Автор: LSD 21.11.2006, 18:53 | ||||||
Нужна только поддержка протокола TCP/IP, т.е. начиная с Win2000 и старше это все есть (про Linux я и не говорю).
Вначале запускаешь проверку на то, что кто-то уже работает по этому порту:
а затем если никто порт не занял, занимаешь его сам (первый доступный из диапазона). |
Автор: <Spawn> 22.11.2006, 08:23 |
А разве в Java нет доступа к объектам синхронизации ОС? Вроде Mutex, Semaphore? В Delphi легко данная проблема решалась через данные механизмы - незнаю насколько это осуществимо в Java, если нужен кросплатформенный код... |
Автор: LSD 22.11.2006, 11:21 |
Нет. |
Автор: cube 16.8.2007, 18:58 | ||
как это можно реализовать? Можно пример... И еще можно ли сделать так чтобы при втором запуске разворачивался первый интерфейс приложения, как например Нетбинс (при повторном клике на ярлык разворачивается свернутое приложение?) |
Автор: _Michael 17.8.2007, 11:34 |
По-моему http://forum.vingrad.ru/forum/topic-168232.html ета тема уже обсуждалась. |