Comment lancer une seule instance de mon application JAVA

Résolu
Signaler
Messages postés
113
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
26 mai 2014
-
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
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

Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
11
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
    }
});
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
25
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
Messages postés
113
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
26 mai 2014

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/
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
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
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
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)
Messages postés
113
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
26 mai 2014

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.
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
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)
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
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
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
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)
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
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