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

bourgi220 Messages postés 21 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 30 août 2006 - 30 août 2006 à 02:09
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 30 août 2006 à 21:59
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
30 août 2006 à 07:57
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 ?
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
30 août 2006 à 09:40
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
0
bourgi220 Messages postés 21 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 30 août 2006
30 août 2006 à 20:41
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!
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
30 août 2006 à 20:51
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bourgi220 Messages postés 21 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 30 août 2006
30 août 2006 à 20:54
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 ;-) @+
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
30 août 2006 à 21:03
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
0
bourgi220 Messages postés 21 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 30 août 2006
30 août 2006 à 21:21
non en fait ça ne me pose pas de problème de ne pas le mettre dans mon jar...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
30 août 2006 à 21:23
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
0
bourgi220 Messages postés 21 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 30 août 2006
30 août 2006 à 21:53
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?
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
30 août 2006 à 21:59
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
0
Rejoignez-nous