Comment lancer une seule instance de mon application JAVA

Résolu
cs_redbar Messages postés 112 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 26 mai 2014 - 8 juin 2012 à 12:50
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 14 juin 2012 à 20:46
Bonjour à tous

Je viens vers vous pour demander votre aide.
Voici mon problème;
Je viens de créer mon premier logiciel en java et je suis sur le point de le compiler. Mais je voudrais que lorsque l'utilisateur cliquera sur le jar pour lancer le logiciel et que celui-ci sera lancer, qu'un message lui soit envoyé s'il clique de nouveau sur le jar.
exemple de message "UNE INSTANCE DU PROGRAMME EST EN COURS D’EXÉCUTION" . disons que je voudrais empêcher de lancer plusieurs fois le programme.

Aussi je voudrais mettre un action à exécuter sur le bouton fermer d'une JFrame; je veux parler du bouton avec la croix dessus dans l'angle de la JFrame.

Merci pour votre aide

10 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
8 juin 2012 à 14:20
salut,

pour ce qui est d’empêcher les instances multiples, je ne sais pas... mais je serai intéressé par le réponse ^^

concernant le clique sur la petite croix, tu peux le faire comme ceci:

myFrame.addWindowStateListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    	//code à effectuer
    }
});
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
8 juin 2012 à 14:30
Bonjour.
Il y a toujours la vieille technique de créer un fichier "lock".
Tu vérifies au lancement de ton programme s'il existe ou non (et tu le créé si non présent).

cdt
0
cs_redbar Messages postés 112 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 26 mai 2014
8 juin 2012 à 15:02
Merci pour vos réponses.
Cormandyr merci pour ta réponse à propos du bouton fermer de la JFrame.

Pour la première préoccupation voici ce que j'ai trouver sur le net ;
http://java.developpez.com/faq/java/?page=execution
je viens de le tester et ça marche.

Aussi va sur ce lien et tu verra des explication
http://www.developpez.net/forums/d148068/java/general-java/seule-instance-meme-programme-java/
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
10 juin 2012 à 12:01
Salut,


Perso je préfère de loin la solution du lock sur un fichier que celle utilisant un socket...


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
10 juin 2012 à 15:54
yo,
Le fichier lock reste le moyen le plus simple ... cependant il peu entrainer un probleme difficile à résoudre ;o) : crash du system ou de l appli, dans ce cas l application ne redémarre plus ;-( ... dommage que les jvm ne se parlent pas entre elles ;o) ...


GodConan ;o)
0
cs_redbar Messages postés 112 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 26 mai 2014
11 juin 2012 à 12:01
salut
je ne connais pas la solution du lock.Je suis un débutant en JAVA donc pour l'heure, je veux essayer toutes les pistes dans differentes applications afin de connaitre un peu chaque piste et me faire mon opinion sur chaque solution. Peux tu me dire quelque chose la dessus TWINUTS?
- Quels sont ses avantage et ses inconvénients?
- et comment on implémente l solution du lock?

Aussi puis-je savoir la grande difference entre la solution du socket et celle du lock.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
12 juin 2012 à 06:39
c est le fichier lock en fait ;o) ..
à l ouverture de ton appli tu crées un fichier (ou tu y pose une valeur) et à la fermeture tu l effaces (ou tu enleve la valeur) il te suffit ainsi de tester la presence du fichier (ou la valeur) pour savoir si to appli est ouverte...

meme principe pour le socket, mais la l avantage c est que si ton appli est terminé anormalement etben le socket aussi ;o) ... de plus tu n as pas besoin de droit en ecriture paticulier.. inconvénient ;o) il faut avoir une conf réseau ;o), quasiment trivial de nos jours... et attendre l exception peu prendre un certain temps ;o) ...



GodConan ;o)
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 juin 2012 à 08:04
Salut,


Désolé je n'avais pas dans l'idée de simplement créer un fichier ou même d’écrire la moindre chose dedans, mais simplement d'y poser un lock en passant par les channels.

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;


public class Test {

  public static void main(String[] args) throws Throwable {
    final File lockFile = new File("/tmp/monlock.lock");
    if(!lockFile.exists()) lockFile.createNewFile();
    final RandomAccessFile raLockFile = new RandomAccessFile(lockFile, "rw");
    if(raLockFile.getChannel().tryLock() == null) {
      System.err.println("Start KO : Lock déjà posé");
      System.exit(1);
    } else
      System.out.println("Start OK");

    /* Pour le delete à la sortie de l'application */
    Runtime.getRuntime().addShutdownHook(new Thread() {
      public void run() {
        if(lockFile != null && lockFile.exists()){
          try {
            raLockFile.getChannel().close();
          } catch (IOException e) { }
          lockFile.delete();
        }
      }
    });
    /* simplement pour que le programme ne leave pas tout de suite */
    while(true) Thread.sleep(100);
  }
}



-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
12 juin 2012 à 18:37
effectivement cela à l air plus éfficasse ;o) ... et meme si le lock n est pas enlevé en cas de crash... il le sera au redémarrage... ;o)
pour la cloture ;o) je ne pense pas qu un thread soit nécessaire ;o) ... on peut esperer que l appli passe toujours par le meme point à sa fermeture ;o) ...

GodConan ;o)
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 juin 2012 à 20:46
Salut,

Pour le hook c'est plus pour enlever le fichier sur un Ctrl-C dans la console ^^'


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous