Bonjour,
J'ai un client lourd Java qui peut être lancé en double-cliquant sur un jar exécutable. Pour diverses raisons, je veux que ce client ne puisse pas être lancé plusieurs fois en même temps (pour faire bref : l'exécution de l'interface plusieurs fois en parallèle peut provoquer des comportements bizarres, voire le plantage de l'application).
Pour cela, j'ai mis en place la solution suivante :
- Au premier lancement, l'application crée un fichier monappli.log (dans windows\temp par exemple), dans lequel je mets juste la date et l'heure de lancement de l'appli
- Lorsque l'appli fermée en cliquant sur la croix en haut à droite, le fichier est supprimé comme ceci:
- A chaque démarrage de l'application, on vérifie si ce fichier existe, si c'est le cas, c'est que l'appli est déjà lancée et j'affiche un message adéquat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void processWindowEvent(WindowEvent e) { if (e.getID() == WindowEvent.WINDOW_CLOSING) { // suppression du fichier } super.processWindowEvent(e); }
Le problème est que cette solution ne marche que si on ferme l'application "normalement" (via la croix en haut à droite). Si l'application est lancée par un script (qui exécute java -jar monjar.jar) et que ce script est stoppé, le fichier monappli.log ne sera pas effacé. De même, si on kill violemment le processus, le fichier ne sera pas effacé. Du coup, au redémarrage de l'appli, ça dit qu'elle est déjà lancée alors que ce n'est pas le cas.
C'est très moyen. Auriez-vous une autre solution à proposer ?
Merci d'avance
Le marlou
Partager