|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() Étudiant Inscription : septembre 2006 Messages : 430 ![]() |
Salut à tous et à toutes
voici mon idée : une classe <InstanceUnique> tente de renommer un jar <Application.jar> et SI elle réussit ALORS elle restaure l'ancien nom et lance l'application, SINON on sait que l'application est déjà lancée donc on affiche un message.. Code :
Dans le zip joint il y a une petite démonstration.. Qu'est-ce que vous en dites ? |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() |
magnifique
1) qu'est-ce qui te fais croire que l'impossibilité de renommer implique nécessairement que l'applicaition est lancée? (Le fichier peut être read-only par exemple ou pas de droit d'accès) 2) qu'est-ce qui te fait croire que, quand l'application sera lancée, le renommage est impossible? Les fichiers de lock dans le répertoire temporaire, çà reste le plus efficace.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#3 | |
|
Membre confirmé
![]() Étudiant Inscription : septembre 2006 Messages : 430 ![]() |
Citation:
![]() 2. A ce que je connais ce n'est pas possible.. Non ? Je précise que c'est une solution "débutant" qui fonctionne lorsque l'exécutable de l'application n'est pas read-only Enfin, merci bien pour ton commentaire constructif |
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() |
Sous windows, non, mais java est multi plateforme. De plus comme ce comportement sous windows (auto locking des fichiers ouverts) fait plus chier qu'autre chose, rien ne garantit que ce ne sera pas fixé
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Étudiant Inscription : septembre 2006 Messages : 430 ![]() |
OK, merci pour l'explication
un point de moins pour mon idée |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Salut,
+1 pour tchize_ Sans compter qu'un fichier temporaire peut être marqué "delete on exit" et qu'une socket est automatiquement fermé à la fin du process. Alors que dans ton cas si le fichier n'est pas renommé correctement à la fin du programme tout est bloqué De plus un utilisateur peut avoir le droits d'exécuter un programme mais pas de le renommer ! a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
|
00
|
|
|
#7 | |
|
Membre confirmé
![]() Étudiant Inscription : septembre 2006 Messages : 430 ![]() |
Citation:
je trouve comme même que cette solution (dans le cas où les droits de renommer est fourni) est "meilleure" que celle avec les fichiers temporaires : le risque de ne pas renommer le fichier dans ma solution est beaucoup plus inférieure que le risque de ne pas supprimer le fichier temporaire, vous trouvez pas ? |
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() |
Normalement, quand on utilise un fichier temporaire, on le lock, on se contente pas de voir si il existe. Si l'application qui l'a créé est arrêté mais a oublié de le nettoyer, y a plus de lock dessus. Par contre, si elle l'a locké et qu'il l'est toujours, c'est que l'application tourne encore!
Pour faire des lock en java, il faut passer par l'api des FileChannel et utilise tryLock()
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#9 | |
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Citation:
Tandis qu'avec un fichier temporaire il suffit d'utiliser un deleteOnExit() pour qu'il soit supprimé automatiquement à la fin du programme, même en cas d'exception. En fait je ne vois que 2 cas particulier (à ma connaissance) où cela ne fonctionnerait pas :
Maintenant si tu veux un système plus évolué tu peux peut-être te tourner vers les FileLock, mais attention car le fonctionnement est également dépendant du système... a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() ![]() |
depuis la doc de deleteonexit:
Citation:
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 657 ![]() |
Le filelocking consiste à interdire l'accès à un fichier aux autres processus... on ne fait pas du filelocking ici !
a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Étudiant Inscription : septembre 2006 Messages : 430 ![]() |
OK merci bien les gars
je vais essayer ce que vous avez dis : dommage que ma solution ne soit pas fonctionnelle mais je suis heureux que ça soit une occasion pour moi pour apprendre de nouvelles choses ![]() Merci encore pour vos commentaires constructifs.. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com