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 :

[système] récupérer l'instance active de l'application [FAQ]


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 106
    Points
    106
    Par défaut [système] récupérer l'instance active de l'application
    bonjour

    voilà, je fais un prog en java qui propose une option "Fonctionner en arrière-plan" qui rend invisible l'application et elle est réaccessible en double-cliquant sur l'icône dans le systèmeTray. Jusque là, tout est normal. Mais, je veux mettre l'option de ne pas afficher d'icône dans le system tray, il faut alors un autre moyen de réouvrir l'application active. J'ai pas vu de moyen dans le gestionnaire des tâches Windows. Donc, j'ai pensé qu'en démarrant l'application en cliquant sur l'exécutable, ça allait en fait réouvrir l'instance de mon programme qui était présentement actif, et non en redémarrer un nouveau (et donc être obligé de tuer le processus de l'ancien prog par le gestionnaire des tâches. Est-ce que quelqu'un saurait comment s'y prendre pour faire cela ? Merci d'avance

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    ça ne résout pas tout a fait ton problème mais peut-étre que ça peut t'aider :
    Comment avoir une seule instance de mon application qui tourne ?

  3. #3
    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,

    Sinon si ton application est déployé via Java Web Start tu peux utiliser le SingleInstanceService...

    a++

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    J'ai deja eu cette problematique.

    L'astuce c'est d'utiliser ce que propose la FAQ (cf post d'afrikha) et de rajouter un petit truc.

    Tu essayes d'ouvrir un socket server sur le port reserve a ton appli. Si tu ne peux pas (ton appli tourne deja) tu te connecte sur ce meme port avec un socket client qui envoie un message a ton appli.

    Sur reception de ce message, ton appli repasse en foreground si besoin et tu stoppes l'appli qui a reveillee la premiere.

    J'espere avoir reussi a rester clair

    Bulbo

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 106
    Points
    106
    Par défaut
    merci je comprend ce que tu veux dire et que ca va résoudre mon prob

    la seule chose c'est que je ne sais pas très bien comment faire. Peux-tu me donner des pistes stp ?

  6. #6
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    La seule difficulté sera de déterminer un port libre (non utilisé par une quelconque application de la machine).
    Pour ça vous scanner simplement tous les ports ? A mon avis ça peut prendre dans certains cas pas mal de temps non ?

  7. #7
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Bon je suis dans un bon jour voici un piti truc qui devrait faire ton affaire:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
     
    public class SingleHideable extends JFrame
    {
     
      private static int port = 12346;
     
      private static ServerSocket serv;
     
      public SingleHideable()
      {
        super("Test");
     
        waitRequest();
     
        addWindowListener(new WindowAdapter()
        {
          public void windowClosing(WindowEvent event)
          {
            dispose();
            System.exit(0);
          }
        });
     
        JButton but = new JButton("Hide");
        but.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent event)
          {
            setVisible(false);
          }
        });
     
        getContentPane().add(but);
     
        pack();
        show();
      }
     
      private void waitRequest()
      {
        Thread task = new Thread()
        {
          public void run()
          {
            try
            {
              Socket sock = null;
              while(true)
              {
                sock = serv.accept();
                sock.setSoTimeout(2000);
                BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                String line = reader.readLine();
                reader.close();
                sock.close();
                if (line.equalsIgnoreCase("SHOW"))
                {
                  if (! isVisible())
                  {
                    setVisible(true);
                  }
                }
              }
            }
            catch (Exception e)
            {
              e.printStackTrace();
            }
          }
        };
     
        task.start();
      }
     
      private static void checkRunning()
      {
        try
        {
          serv = new ServerSocket(port);
        }
        catch (Exception e)
        {
          try
          {
            Socket sock = new Socket((String)null, port);
            OutputStreamWriter writer = new OutputStreamWriter(sock.getOutputStream());
            writer.write("SHOW\n");
            writer.flush();        
            sock.close();
          }
          catch (Exception e2)
          {}
     
          System.exit(0);
        }
      }
     
      public static void main(String[] args)
      {
        try
        {
          checkRunning();
          new SingleHideable();
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    }
    Bulbo

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Citation Envoyé par orelero
    Pour ça vous scanner simplement tous les ports ? A mon avis ça peut prendre dans certains cas pas mal de temps non ?
    Deja tu cites qui ? Personne n'a parler de ca dans ce thread il me semble .

    Ensuite pourquoi scanner tout les ports ? tu en fais quoi ensuite ? Tu stockes le port dans un fichier de conf ? Dans ce cas autant le faire a la main.

    Tu determines un numero de port non utilise, tu le mets dans ta documentation, mieux tu indiques ou changer ce numero (dans un fichier de conf c mieux) s'il pose conflit sur une des machines et voilou.

    Bulbo

  9. #9
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    Pour la citation je faisais réference au lien donné ci-dessus (http://java.developpez.com/faq/java/...nceApplication)
    Pour l'histoire de scanner les ports je pensais que c'était ça puisque je ne connais pas moyen de savoir à l'avance quel port est ouvert ou non. En fait c'est pas tous les ports que j'aurai dû dire, en gros je pensais qu'il fallait scanner tant qu'un port libre n'a pas été trouvé.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Points : 106
    Points
    106
    Par défaut
    merci bcp pour la réponse claire

    ca marche

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

Discussions similaires

  1. [Système] Récupérer l'adresse MAC de la machine
    Par la.musaraigne dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 27/01/2011, 15h08
  2. récupérer l'instance d'une application
    Par skywaukers dans le forum Langage
    Réponses: 7
    Dernier message: 15/09/2008, 23h54
  3. Réponses: 3
    Dernier message: 18/01/2008, 17h54
  4. [C# - Application] - Récupérer l'instance de l'application.
    Par angusyoung34 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/12/2005, 14h45
  5. Réponses: 5
    Dernier message: 22/12/2004, 17h50

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