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

Java Discussion :

Comment savoir si l'appli est déjà lancée? [FAQ]


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    Par défaut Comment savoir si l'appli est déjà lancée?
    Salut,

    Je cherche une solution pour savoir si l'appli est déjà lancée. Par exemple, je crée une application Appli, et si je la lance alors qu'elle est déjà lancée dans le système, je veux que ça ouvre la fenêtre déjà lancée et non que ça lance une 2e fois le programme.
    Et de préférence, tout en restant multiplateforme, bien sur

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Pour savoir si une application est déja lancée, personnellement j'ouvre un socket sur un port au début de l'application et si je n'y arrive pas, ca veut dire que l'appli est déja lancée. Mais faut faire attention à prendre un port qui n'est pas utililisé par une appli du réseau. Et ce n'est pas très optimal...

    Tu peut aussi créer un fichier à l'ouverture s'il n'existe pas et le supprimmer à la fermeture, ainsi lors du lancement, si le fichier existe, ca veut dire qu'une autre instance de ton programme est lancée, sinon tu peut le lancer.

  3. #3
    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
    Par défaut
    Citation Envoyé par wichtounet
    Pour savoir si une application est déja lancée, personnellement j'ouvre un socket sur un port au début de l'application et si je n'y arrive pas, ca veut dire que l'appli est déja lancée. Mais faut faire attention à prendre un port qui n'est pas utililisé par une appli du réseau. Et ce n'est pas très optimal...

    Tu peut aussi créer un fichier à l'ouverture s'il n'existe pas et le supprimmer à la fermeture, ainsi lors du lancement, si le fichier existe, ca veut dire qu'une autre instance de ton programme est lancée, sinon tu peut le lancer.
    J'avais pensé à la 2e solution, le pb c'est que si l'appli plante (ou le pc reboot), le fichier reste sur le ddur... Et donc au prochain démarrage, il va pas vouloir lancer une nouvelle instance...

    Pour la première, ça doit marcher, mais bon, ça me paraît un peu gros pour juste voir si c lancé... Il doit y avoir une solution plus "simple" non?

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par ®om
    J'avais pensé à la 2e solution, le pb c'est que si l'appli plante (ou le pc reboot), le fichier reste sur le ddur... Et donc au prochain démarrage, il va pas vouloir lancer une nouvelle instance...

    Pour la première, ça doit marcher, mais bon, ça me paraît un peu gros pour juste voir si c lancé... Il doit y avoir une solution plus "simple" non?
    La première solution est encore plus simple que la deuxième à mettre en oeuvre

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try{ new ServerSocket(12345); }
    catch(Exception e){
    //Si il est ouvert, on affiche un message et on quitte le programme
    JOptionPane.showMessageDialog(null, "Ce programme est déja ouvert");
    System.exit(0);
    }

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Par défaut
    Pourquoi ne pas utiliser un singleton ?
    Ca sert a ça non ?

  6. #6
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par e1lauren
    Pourquoi ne pas utiliser un singleton ?
    Ca sert a ça non ?
    Non ca sert pas à ca...

    Un singleton permet de n'avoir qu'une seule instance à l'intérieur d'un programme, mais ne permet pas de savoir depuis un autre programme si une instance est déja ouverte.

    Citation Envoyé par ®om
    Oui, plus simple au niveau du code, mais bon ça fait un socket d'ouvert juste pour ça... Mais en y réfléchissant, c'est pas si mal...
    Ben, c'est sur qu'il faut faire attention sur quel port tu l'ouvre, tu vas pas essayer d'ouvrir un socket sur le port 80 Par exemple le port 12345, ca m'étonnerait qu'il soit utilisé quelque part

  7. #7
    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
    Par défaut
    Citation Envoyé par e1lauren
    Pourquoi ne pas utiliser un singleton ?
    Ca sert a ça non ?
    Singleton c pour une instance d'une classe au sein d'un programme java... Pas du même programme lancé plusieurs fois

  8. #8
    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
    Par défaut
    Citation Envoyé par wichtounet
    La première solution est encore plus simple que la deuxième à mettre en oeuvre

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try{ new ServerSocket(12345); }
    catch(Exception e){
    //Si il est ouvert, on affiche un message et on quitte le programme
    JOptionPane.showMessageDialog(null, "Ce programme est déja ouvert");
    System.exit(0);
    }
    Oui, plus simple au niveau du code, mais bon ça fait un socket d'ouvert juste pour ça... Mais en y réfléchissant, c'est pas si mal...

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

Discussions similaires

  1. DOS BATCH comment savoir si un programme est déjà lancé ?
    Par ritchie23 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 21/10/2008, 19h37
  2. Réponses: 20
    Dernier message: 18/05/2008, 16h33
  3. Réponses: 2
    Dernier message: 14/09/2006, 23h35
  4. Comment savoir si une application est lancée ?
    Par Teddy dans le forum Delphi
    Réponses: 2
    Dernier message: 02/07/2006, 19h33
  5. Réponses: 6
    Dernier message: 01/07/2005, 15h06

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