Sweetohm

Michel Casabianca

Voici un bout de code java très utile lorsqu’on souhaite qu’une application ne puisse tourner qu’en un seul exemplaire sur une machine.

Pour ce faire, il suffit d’ouvrir un port en écoute. c’est beaucoup plus efficace que des fichiers de lock car lorsque l’application se termine, le port est libéré par l’OS, même si l’application a planté.

private static void ensureSingleInstance() {
    try {
        final ServerSocket socket = new ServerSocket(12345);
        System.out.println("Le serveur est la seule instance, on continue");
        Thread thread = new Thread(new Runnable() {
            public void run() {
                while (true) {
                    try {
                        socket.accept();
                    } catch (IOException e) {
                        // do nothing
                    }
                }
            }
        });
        thread.setDaemon(true);
        thread.start();
    } catch(Exception e) {
        System.out.println("Une autre instance du serveur tourne, arrêt");
        System.exit(1);
    }
}

Un projet d’exemple se trouve dans cette archive.

Enjoy!