Eviter le lancement de deux instances d'une même appli java
2 réponses
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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...
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
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...)
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...)
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...)