Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INSTANCE UNIQUE D'UN PROGRAMME (SANS SOCKET NI FICHIER)


Information sur la source

Catégorie :Systeme Classé sous : unique, instance, programme Niveau : Débutant Date de création : 13/05/2008 Vu / téléchargé: 2 784 / 78

Note :
Aucune note

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


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

  • /*
  • * 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();
  • }
  • }
/*
 *  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 ?
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   source
    • application.jarTélécharger ce fichier [Réservé aux membres club]1 258 octets
    • InstanceUnique.jarTélécharger ce fichier [Réservé aux membres club]1 709 octets
    • InstanceUnique.javaTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 023 octets

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de vecchio56 le 14/05/2008 22:31:50 administrateur CS

Application.jar n'est-il pas un fichier?

signaler à un administrateur
Commentaire de Chatbour le 14/05/2008 23:03:25

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..

signaler à un administrateur
Commentaire de vecchio56 le 14/05/2008 23:08:02 administrateur CS

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.

signaler à un administrateur
Commentaire de mahlaoui le 20/05/2008 00:26:19

Many Thanks

signaler à un administrateur
Commentaire de mehdi7604 le 16/09/2008 22:14:54

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 ?

signaler à un administrateur
Commentaire de Chatbour le 16/09/2008 22:30:09

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..

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Unique instance de programme [ par indiana_jules ] Salut, j'aimerais pouvoir n'avoir qu'une seule instance de mon programme qui tourne. Existe-t-il un moyen propre de le faire ? (sans passer par un Ser Exemple de programme, un amateur bloqué [ par dimension9 ] bonjourje d&#233;bute en java et la je tombe sur un &#233;nonc&#233; d'un petit programme, j ai essay&#233; de le faire mais je bloque.c'est en r&#233 Compiler et executer un programme à l'interieur d'un programme java [ par auvrayju ] Bonjour,Je travaille actuellement sur un projet. Dans celui ci je modifie et cr&#233;e des fichier . java (Filewriter). J'aurais besoin de compiler et applet dans frame [ par mastermario ] bonjours a tous. J'ai un petit probleme que je pense etre tout bete : je viens de creer une fonction applets qui se rafraichit toutes les secondes e Probleme d'acquisition de la temperature provenant d'une carte TINI (serveur web embarqué)! [ par mastermario ] Salut a vous!! Voila je n'arrive pas a acqu&#233;rir la temperature provenant de ma carte TINI, j'ai d&#233;ja un programme complet (en applet )qui m Transformer un programme java en applet [ par sylsau ] Bonjour, J'ai fait une petit programme JAVA utilisant SWING. Voici un screenshot de ce petit programme : http://www.webmaitrise.com/utilitaire.png Récupération d'une partie d'une table [ par stefpoisson ] Bonjour,J'ai r&#233;alis&#233; un programme java qui interroge une base de donn&#233;es et avec les r&#233;sultats cr&#233;e un fichier texte. Ce prog help [ par enit128 ] bonjour &#224; tous,j'ai r&#233;alis&#233; un petit programme en java dont l'objectif est le tracage d'une courbe pr&#233;sentant des&nbsp; valeurs de integration code C dans un programme java [ par prog_amateur ] salut je recherche une methode permettant d'integrer un code C dans un programme java Pb de récupération d'évenement ! [ par joduak ] Bonjour, Comme le sujet l'indique j'ai un &#233;norme probl&#232;me d'&#233;coute clavier...:p En fait j'ai construit une classe "EcouteClavier" qui


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,702 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.