Comment lancer une seule instance de mon application JAVA [Résolu]

cs_redbar 114 Messages postés mardi 26 janvier 2010Date d'inscription 26 mai 2014 Dernière intervention - 8 juin 2012 à 12:50 - Dernière réponse : Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 8 juin 2012 à 14:20
3
Merci
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
    }
});

Merci cormandyr 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cormandyr
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 8 juin 2012 à 14:30
0
Merci
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
Commenter la réponse de cs_laurent1024
cs_redbar 114 Messages postés mardi 26 janvier 2010Date d'inscription 26 mai 2014 Dernière intervention - 8 juin 2012 à 15:02
0
Merci
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/
Commenter la réponse de cs_redbar
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 10 juin 2012 à 12:01
0
Merci
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
Commenter la réponse de Twinuts
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 10 juin 2012 à 15:54
0
Merci
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)
Commenter la réponse de cs_GodConan
cs_redbar 114 Messages postés mardi 26 janvier 2010Date d'inscription 26 mai 2014 Dernière intervention - 11 juin 2012 à 12:01
0
Merci
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.
Commenter la réponse de cs_redbar
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 12 juin 2012 à 06:39
0
Merci
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)
Commenter la réponse de cs_GodConan
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 12 juin 2012 à 08:04
0
Merci
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
Commenter la réponse de Twinuts
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 12 juin 2012 à 18:37
0
Merci
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)
Commenter la réponse de cs_GodConan
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 14 juin 2012 à 20:46
0
Merci
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
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.