Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Eviter le lancement de deux instances d'une même appli java

2 réponses
Avatar
altereco
Bonjour,

J ai développé un logiciel en Java. Pour éviter que plusieurs
instances de la même application soient lancé j'ai fait comme suit:

- lancement appli
- test la présence d'un fichier instance.dat
- Si fichier présent = une appli tourne déjà
- Sinon lancement de l'appli et création du fichier instance.dat
- A la fermeture suppression du fichier.

Le probleme est que si on éteint le PC (coupure courant, Arrêter
l'ordinateur sous Windows ou Linux) le fichier n'est pas détruit et le
lancement de l'appli devient donc impossible sans un effacement manuel
du fichier instance.dat.

Ceci ressemble plus à de la bidouille qu'autre chose, et j'aimerai
savoir si il existe un moyen (il doit) plus propre pour gérer cela ...
ex: Eudora quand on clique sur l'icone et que l'appli est déjà
ouverte, la fenetre Eudora s'affiche...

Merci pour votre aide,
Altereco

2 réponses

Avatar
Philippe
Altereco wrote:
Bonjour,

J ai développé un logiciel en Java. Pour éviter que plusieurs
instances de la même application soient lancé j'ai fait comme suit:

- lancement appli
- test la présence d'un fichier instance.dat
- Si fichier présent = une appli tourne déjà
- Sinon lancement de l'appli et création du fichier instance.dat
- A la fermeture suppression du fichier.

Le probleme est que si on éteint le PC (coupure courant, Arrêter
l'ordinateur sous Windows ou Linux) le fichier n'est pas détruit et le
lancement de l'appli devient donc impossible sans un effacement manuel
du fichier instance.dat.

Ceci ressemble plus à de la bidouille qu'autre chose, et j'aimerai
savoir si il existe un moyen (il doit) plus propre pour gérer cela ...
ex: Eudora quand on clique sur l'icone et que l'appli est déjà
ouverte, la fenetre Eudora s'affiche...

Merci pour votre aide,
Altereco


Tu peux ouvrir une socket lorsque tu lances une appli sur un port donné.

De ce fait, au lancement de ton appli, pour tester si une autre appli
existe, tu essaies d'ouvrir ce port (en client).

Si ça plante : tu lance ton appli normalement, et tu ouvres le port
(avec pourquoi pas un petit deamon qui attente les messages)

Si ça marche : Tu envoyes un message à l'autre appli pour lui dire
de se manifester ;) et tu quittes
Tu peux aussi transmettre d'autres données comme par exemple des noms de
fichiers. Comme ça quand tu ouvres un autre fichier, il apparaitra dans
l'appli déjà ouverte.

J'ai déjà programmé ça et ça marche plutot bien...

--
Philippe

Avatar
Black Myst
Altereco wrote:
Bonjour,

J ai développé un logiciel en Java. Pour éviter que plusieurs
instances de la même application soient lancé j'ai fait comme suit:

- lancement appli
- test la présence d'un fichier instance.dat
- Si fichier présent = une appli tourne déjà
- Sinon lancement de l'appli et création du fichier instance.dat
- A la fermeture suppression du fichier.

Le probleme est que si on éteint le PC (coupure courant, Arrêter
l'ordinateur sous Windows ou Linux) le fichier n'est pas détruit et le
lancement de l'appli devient donc impossible sans un effacement manuel
du fichier instance.dat.

Ceci ressemble plus à de la bidouille qu'autre chose, et j'aimerai
savoir si il existe un moyen (il doit) plus propre pour gérer cela ...
ex: Eudora quand on clique sur l'icone et que l'appli est déjà
ouverte, la fenetre Eudora s'affiche...

Merci pour votre aide,
Altereco


Pour compléter l'idée...
Tu créer un Thread qui attends les connexion local sur un port local.
Tu écrit se numéro de port dans un fichier.

Au démarage de la 2ème instance, tu test la présence du fichier, s'il
existe, tu essaie de te connecter sur le port indiqué dans le fichier,
si la connection échoue, c'est que le fichier date d'un boot différent.


Le fichier n'est pas une obligation absolut, mais sinon il faut utilisé
un port fixé à la compilation (ou dans un fichier de conf) et le
programmeur ne peut pas assuré que ce port ne sera pas pris par une
autre application (sur 30000 ca ne serait pas de chance...)