Instance unique d'un programme (sans socket ni fichier)

Soyez le premier à donner votre avis sur cette source.

Vue 6 455 fois - Téléchargée 317 fois

Description

Salut à tous,

voici l'idée : une classe nommée <InstanceUnique> essaie de renommer le jar <Application.jar> en app_tmp.jar,

si elle réussit
alors elle restaure l'ancien nom
lance l'application
sinon
l'application est déjà lancée : afficher un message

Source / Exemple :


/*

  • Classe: InstanceUnique
  • Auteur: Chatbour
  • /
import java.io.*; import java.awt.Desktop; import javax.swing.JOptionPane; public class InstanceUnique { // nom du fichier jar private String nomJar = "application.jar"; // nom temporaire private String nomTmp = "app_tmp.jar"; public InstanceUnique() { try { File leJar = new File(nomJar); if(leJar.renameTo(new File(nomTmp)) == true) { // On est le premier à instancier l'application new File(nomTmp).renameTo(new File(nomJar)); Desktop.getDesktop().open(leJar); } else { // Sinon afficher un message JOptionPane.showMessageDialog(null, "L'application est déjà lancée !"); } } catch(IOException e) { System.exit(-1); } } public static void main(String[] args) { new InstanceUnique(); } }

Conclusion :


j'attends vos avis les experts, je pense que cette méthode est moins risquée que la méthode de fichier temporaire et plus simple que la méthode des sockets.. Non ?

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
71
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
12 juillet 2009
6
C'est autre chose : un singleton assure une seule instance d'une classe au sein d'une seule instance de la machine virtuelle, mais rien n'empêche deux instances du programme utilisant ce singleton..

Mais ma solution, avec tous ses inconvénients, assure une seule instance du programme..
Messages postés
118
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
6 mars 2015

Quand on parle d'instance unique on parle du Design Pattern Singleton non ? donc la protection sera au niveau de la classe qu'on veut lancer elle meme ?
Messages postés
29
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
13 octobre 2008

Many Thanks
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu ne peux donc pas dire que c'est une solution sans fichier. J'ai regardé l'autre solution dont tu parles, et je pense qu'elle est plus sûre, car avec ta méthode on peut renommer le fichier à la main et ainsi lancer deux instances.
Par contre si le processus verrouille le fichier, on ne peut pas le renommer sans tuer le processus.
Messages postés
71
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
12 juillet 2009
6
Oui bien sûr, mais ici ce n'est pas le même principe de la solution utilisant un fichier temporaire ou l'application crée un fichier en se lançant, et le supprime en quittant..
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.