Bonjour,
Comment n'autoriser qu'une seule session/un seul lancement de mon apllication java ?
a7aa7a
Merci d'avance
Bonjour,
Comment n'autoriser qu'une seule session/un seul lancement de mon apllication java ?
a7aa7a
Merci d'avance
Salut,
Comment avoir une seule instance de mon application qui tourne ?
Sinon, lorsque l'application est déployé via Java Web Start, il est possible d'utiliser un service conçu spécialement pour cela :
Liens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // Utilisation du service : SingleInstanceService singleInstanceService = (SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService"); // Ajout d'un listener qui sera appelé pour chaque nouvelle instance : singleInstanceService.addSingleInstanceListener( new SingleInstanceListener() { public void newActivation(String[] params) { // 'params' contient les paramètres passé à la nouvelle instance } });
a++
Le probleme que tu te pose possde une solution connue sous le nom de Singleton (voir le design pattern du meme nom). En plus de la solution présentée, tu peux donc appliquer ce principe : en gros un constructeur privé ou protected pour les sous classes et une méthode statique qui te renvoie une unique instance de ton application
Son problème n'est pas d'avoir une seule instance d'une classe dans une appli, mais d'avoir une seule appli lancée.
"Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."
Ce n'est pas tout à fait cela : le Singleton permet d'avoir une seul instance d'une classe par application.Envoyé par leyee
Ici il souhaite avoir une seule application sur le système
a++
adiGuba m'a fournie une bonne solution.
Mais ceci m'intéresse.:
Peut tu m'expliquer cela plus simplement ? (je ne suis qu'un débutant )Envoyé par leyee
Le pattern (solution à un probleme récurrent en POO) Singleton est tres simple : il te permet de controler le nombre d'instances d'une classe.
Par extension, tu peut creer des classes dont le nombre d'instances possede un nombre limité d'instances (par forcement une seule)
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 class Singleton { //Unique instance de la classe private static Singleton uniqueInstance; //Le constructeur est privé, il ne peut etre utilisé pour instancier une classe private Singleton() {...} //Methode publique qui permet d'obtenir l'unique instance de la classe Singleton public static getInstance() { if (uniqueInstance == null) uniqueInstance = new Singleton(); return uniqueInstance; } }
Deux solutions au problème (initial):
- le verouillage d'un fichier: quand tu lances ton application, celle-ci verouille un fichier spécifique du disque dur. Si tu tentes de lancer une seconde fois ton application, elle refusera en détectant que le fichier est verouillé. Bien évidemment, il faut penser à le déverrouiller quand on quitte l'application.
- la solution plus "pro", à mon avis, est de réserver un socket libre quand tu lances ton application. Si une deuxième application se lance, elle vérifie ce socket, et si il est déjà réservé par la première instance de ton application, elle refuse de te lancer. Toujours pareil: on libère le socket en fin de programme.
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
Effectivement la deuxieme solution que tu propose est souvent utilisée peu importe le langage pour s'assurer qu'une application ne peut etre lancée qu'une fois
Je vais utiliser ca merci! Euh... comment on verouille un fichier ??? (Honte à moi si c'est dans la FAQ ou dans un tuto ).Envoyé par CyberChouan
J'ai eu beaucoup de déboires avec le verrouillage d'un fichier : ça marche un temps, puis ça ne marche plus, ensuite ça remarche et tu sais pas pourquoi (sous Win d'Oz)
Je te recommande fortement d'utiliser le socket tu y gagnera en tranquilité.
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager