Utiliser des images ou fichier txt avec un jar exécutable

Signaler
Messages postés
21
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
30 août 2006
-
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
Bonjour,

Je me suis déjà beaucoup documenté sur les jar exécutables, j'ai
notamment lu ce sujet:
http://www.javafr.com/infomsg_CR-233-ER-FICHIER-JAR-EXECUTABLE_141476.aspx


On y explique notamment comment se servir d'images avec un jar
exécutable. Mais j'ai essayé et peut etre que je m'y prend mal mais ça
marche pas.


En gros voilà mon problème:

J'ai fait un programme qui utilise une image qui est dans le meme
dossier (à la racine) que le programme. En dehors du jar ça fonctionne
évidemment. Mais quand je tente d'utiliser le jar exécutable, il ne
trouve pas l'image.


Que dois-je mettre exactement dans mon class-path si mon image s'appelle ah.jpg.


Encore une question, j'ai surement mal compris mais quand je lis ceci: http://java.developpez.com/faq/java/?page=execution

il me semble comprendre que l'on doit mettre les fichiers qu'on utilise
(mon image en l'occurence) dans un fichier jar?? j'ai également essayé
mais ça n'a pas marché chez moi. j'ai mis mon image dans un fichier jar
puis dans mon manifest j'ai mis: "Class-Path: ./archive.jar" mais ça na
pas marché non plus.


Aidez moi svp...


@+

10 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
J'ai pas trop bien compris ton problème : tu utilise des images en dehors de ton jar, ou à l'intérieur de celui-ci ?
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

Pour les deux solutions ci-dessous ce que tu fais dans le manifest est innutile

1 - si tu mets des images dans un jar externe il te faut le voir comme un gros ZIP et recupéré dynamiquement les images dedans ce qui en soit n'est franchement pas complex à réaliser, il y a quelques exemples dessus sur le net!

2 - si tu le met dans le meme jar que celui contenant tes classes voici un exemple (ne met jamais de \ pour séparer un chemin vu qu'il est assimilable à une URL)
exemple admettons le jar toto.jar et dedans tu as les répertoires suivant  images/png/ contenant l'image toto.png

toto.jar
  |
  ------->images
                |
                ------->png
                             |
                             ------->toto.png

dans ton code tu devra proceder comme suit pour une methode non static :
URL url = getClass().getClassLoader().getResource("images/png/toto.png");
Image img = Toolkit.getDefaultToolkit().createImage(url);

et pour une classe static :
URL url = NomDeLaClasseCourrante.class.getClassLoader().getResource("images/png/toto.png");
Image img = Toolkit.getDefaultToolkit().createImage(url);

sinon tu peux passer par le system :
URL url = ClassLoader.getSystemClassLoader().getResource("images/png/toto.png");
Image img = Toolkit.getDefaultToolkit().createImage(url);

NOTE:
si tu veux récuperer un fichier se trouvant dans ton jar il ne faut pas passer par getResource mais par getResourceAsStream

exemple pour le fichier toto.txt se trouvant dans le répèrtoire fichiers/texte de ton jar toto.jar
toto.jar

  |

  ------->fichiers

                |

                ------->texte

                             |

                             ------->toto.txt

dans ton code tu devra proceder comme suit pour une methode non static :
InputStream is = getClass().getClassLoader().getResourceAsStream("fichiers/texte/toto.txt");


et pour une classe static :
InputStream is = NomDeLaClasseCourrante.class.getClassLoader().getResourceAsStream("fichiers/texte/toto.txt");


sinon tu peux passer par le system :
InputStream is =  ClassLoader.getSystemClassLoader().getResourceAsStream("fichiers/texte/toto.txt");

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
21
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
30 août 2006

merci beaucoup pour ta réponse... ça marche nickel maintenant!


Mais je rencontre un nouveau problème, je n'arrive pas à écrire dans un
fichier txt qui est dans mon jar... j'ai fait des recherches qui disent
que c'est impossible... est-ce vrai?


@+ et encore merci!
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

ton fichier et dans un jar qui est assimilable a un zip normalement tu peux le modifier mais faut le faire en plusieurs etapes :

1 - tu recupere le contenu
2 - tu modifie le contenu en memoire
3 - tu update le jar(regarde avec la class ZIP)

mais je ne pense pas que cela soit possible si le jar est celui qui contient ton application

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
21
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
30 août 2006

mais si la situation est la suivante:

le jar est dans le dossier "application/monjar.jar"

mon fichier txt est dans le mm dossier: "application/montxt.txt"


A partir de ce moment comment puis-je faire pour modifier montxt.txt à partir de monjar.jar??


encore merci ;-) @+
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Donc il n'est pas dans ton jar?

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
21
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
30 août 2006

non en fait ça ne me pose pas de problème de ne pas le mettre dans mon jar...
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
si il n'est pas dans ton jar une simple modification de fichier suffit

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
21
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
30 août 2006

non hélas ça ne marche pas...


mon fichier saving.dat est dans le meme dossier que mon jar et avec ce code ça ne marche pas:


                FileWriter fw = new FileWriter("saving.dat");

                BufferedWriter bw = new BufferedWriter(fw);

                PrintWriter outFile = new PrintWriter(bw);


Alors que dois-je mettre?
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Regarde sur le site il y a des exemples pour ecrire dans un fichier (regarde aussi sur codyx)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA