IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Application unique ?


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut Application unique ?
    Bonjour,

    Comment n'autoriser qu'une seule session/un seul lancement de mon apllication java ?

    a7aa7a

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Comment avoir une seule instance de mon application qui tourne ?


    Sinon, lorsque l'application est déployé via Java Web Start, il est possible d'utiliser un service conçu spécialement pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Utilisation du service :
    SingleInstanceService singleInstanceService = 
    	(SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService");
     
    // Ajout d'un listener qui sera appelé pour chaque nouvelle instance :
    singleInstanceService.addSingleInstanceListener( new SingleInstanceListener() {
    	public void newActivation(String[] params) {
    		// 'params' contient les paramètres passé à la nouvelle instance
    	}
    });
    Liens :

    a++

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Le probleme que tu te pose possde une solution connue sous le nom de Singleton (voir le design pattern du meme nom). En plus de la solution présentée, tu peux donc appliquer ce principe : en gros un constructeur privé ou protected pour les sous classes et une méthode statique qui te renvoie une unique instance de ton application

  4. #4
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Son problème n'est pas d'avoir une seule instance d'une classe dans une appli, mais d'avoir une seule appli lancée.
    "Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par leyee
    Le probleme que tu te pose possde une solution connue sous le nom de Singleton (voir le design pattern du meme nom).
    Ce n'est pas tout à fait cela : le Singleton permet d'avoir une seul instance d'une classe par application.

    Ici il souhaite avoir une seule application sur le système

    a++

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut
    adiGuba m'a fournie une bonne solution.
    Mais ceci m'intéresse.:

    Citation Envoyé par leyee
    En plus de la solution présentée, tu peux donc appliquer ce principe : en gros un constructeur privé ou protected pour les sous classes et une méthode statique qui te renvoie une unique instance de ton application
    Peut tu m'expliquer cela plus simplement ? (je ne suis qu'un débutant )

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310

  8. #8
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Le pattern (solution à un probleme récurrent en POO) Singleton est tres simple : il te permet de controler le nombre d'instances d'une classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class Singleton
    {
       //Unique instance de la classe
       private static Singleton uniqueInstance;
     
       //Le constructeur est privé, il ne peut etre utilisé pour instancier une classe
       private Singleton()
       {...}
     
       //Methode publique qui permet d'obtenir l'unique instance de la classe Singleton
       public static getInstance()
       {
          if (uniqueInstance == null)
             uniqueInstance = new Singleton();
          return uniqueInstance;
       }
     
    }
    Par extension, tu peut creer des classes dont le nombre d'instances possede un nombre limité d'instances (par forcement une seule)

  9. #9
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Deux solutions au problème (initial):

    - le verouillage d'un fichier: quand tu lances ton application, celle-ci verouille un fichier spécifique du disque dur. Si tu tentes de lancer une seconde fois ton application, elle refusera en détectant que le fichier est verouillé. Bien évidemment, il faut penser à le déverrouiller quand on quitte l'application.

    - la solution plus "pro", à mon avis, est de réserver un socket libre quand tu lances ton application. Si une deuxième application se lance, elle vérifie ce socket, et si il est déjà réservé par la première instance de ton application, elle refuse de te lancer. Toujours pareil: on libère le socket en fin de programme.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  10. #10
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Effectivement la deuxieme solution que tu propose est souvent utilisée peu importe le langage pour s'assurer qu'une application ne peut etre lancée qu'une fois

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 81
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par CyberChouan
    Deux solutions au problème (initial):

    - le verouillage d'un fichier: quand tu lances ton application, celle-ci verouille un fichier spécifique du disque dur. Si tu tentes de lancer une seconde fois ton application, elle refusera en détectant que le fichier est verouillé. Bien évidemment, il faut penser à le déverrouiller quand on quitte l'application.

    - la solution plus "pro", à mon avis, est de réserver un socket libre quand tu lances ton application. Si une deuxième application se lance, elle vérifie ce socket, et si il est déjà réservé par la première instance de ton application, elle refuse de te lancer. Toujours pareil: on libère le socket en fin de programme.
    Je vais utiliser ca merci! Euh... comment on verouille un fichier ??? (Honte à moi si c'est dans la FAQ ou dans un tuto ).

  12. #12
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Oui! mais pourquoi cela ne marche pas?
    Les deux stratégies proposées doivent être bonnes, mais en copier-coller sous debugger de Netbeans, cela ne marche pas.
    Il y a un truc?

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Ne pas utiliser le verrouillage d'un fichier
    J'ai eu beaucoup de déboires avec le verrouillage d'un fichier : ça marche un temps, puis ça ne marche plus, ensuite ça remarche et tu sais pas pourquoi (sous Win d'Oz)
    Je te recommande fortement d'utiliser le socket tu y gagnera en tranquilité.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instance d'application unique (mais ..)
    Par fab9292 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/12/2013, 17h40
  2. Bug d'une application uniquement sous Samsung S4
    Par slvn dans le forum Android
    Réponses: 1
    Dernier message: 25/11/2013, 08h07
  3. Réponses: 1
    Dernier message: 15/07/2013, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo