Вы можете использовать библиотеку JUnique. Он обеспечивает поддержку для запуска Java-приложения с одним экземпляром и является открытым исходным кодом.
http://www.sauronsoftware.it/projects/junique/
Библиотека JUnique может использоваться для предотвращения одновременного запуска пользователем экземпляров одного и того же Java-приложения.
JUnique реализует блокировки и каналы связи, совместно используемые всеми экземплярами JVM, запущенными тот же пользователь.
blockquote>public static void main(String[] args) { String appId = "myapplicationid"; boolean alreadyRunning; try { JUnique.acquireLock(appId, new MessageHandler() { public String handle(String message) { // A brand new argument received! Handle it! return null; } }); alreadyRunning = false; } catch (AlreadyLockedException e) { alreadyRunning = true; } if (!alreadyRunning) { // Start sequence here } else { for (int i = 0; i < args.length; i++) { JUnique.sendMessage(appId, args[0])); } } }
Под капотом он создает блокировки файлов в папке% USER_DATA% /. junique и создает серверный сокет в случайном порту для каждого уникального приложения, которое позволяет отправлять / получать сообщений между Java-приложениями.