Se connecter / S'enregistrer

Résolu jar et ressources

Solutions (10)
Tags :
  • Xml
  • Java
  • Programme
  • Programmation
|
Bonjour,

Je suis en train de développer une application java.

Le but final est que la totalité de l'application soit dans 1 seul fichier : le fichier .jar.
Donc n'importe quel utilisateur de n'importe quel endroit aura simplement à double-cliquer sur le .jar pour que le programme tourne sans soucis.

Problème : mon application a besoin d'images et de fichiers .xml

Voici l'arborescence de mon projet :
projet/
src/ test/ nbproject/ build/ build.xml manifest.mf

Dans le dossier src/, on trouve :
modele/ vue/ controleur/ ressources/ main.java

Et enfin dans le dossier ressources, on a :
img.jpg base.xml

Voilà pour le cadre.

Alors maintenant, sous netbeans, le code qui fonctionne pour l'appel des images est le suivant :
Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/ressources/img.jpg"));

et pour l'appel du fichier base.xml :
str = xpath.evaluate("chemin"]", new InputSource(new FileInputStream("src/ressources/base.xml")));


Là quand j'appuie sur "play", tout fonctionne parfaitement !

Sauf que quand je lance le .jar, et ben il ne trouve pas le fichier base.xml, et c'est normal !

Je m'explique :
Si on regarde d'un peu plus près la différence entre l'appel de ces deux types de fichier, on remarque que :
pour l'image, on part directement du dossier /ressources
tandis que pour le xml, on part un cran plu tôt : du dossier src/ressources

OR le .jar ne contient pas de dossier src !!!
Il contient uniquement son contenu (à savoir modele/ vue/ controleur/ ressources/ et main.java)

Le problème est que je n'arrive pas à trouver de solution pour que le programme fonctionne à la fois sous netbeans (bouton "play"), et à la fois en double-cliquant sur le .jar

Merci d'avance pour votre aide !

Si j'ai mal expliqué quelque chose ou si vous avez des questions n'hésitez pas !!!
Contenus similaires
Meilleure solution
partage
, Modérateur |
Salut,

Il ne faut pas que tu utilises FileInputStream dans ce cas, mais que tu charges une ressources, comme tu le fais pour ton image.
Ca sera quelque chose similaire à :
  1. Class.getResourceAsStream("ressources/base.xml");

Et ça te donne un InputStream, que tu pourras utiliser dans ton InputSource j'imagine.
  • Commenter cette solution |
Score
0
òh
òi
, Modérateur |
Ok, dans ce cas fait un new File() de ton getFile() vu que ça te retourne une string.
  1. File file = new File(Class.getResource(...).getFile());
  • Commenter cette réponse |
Score
0
òh
òi
|
Non non, getResource renvoie bien une URL, mais getFile renvoie une string (le chemin complet), et getName n'existe pas
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Il me semble que c'est getResource qui retourne une URL, mais le getFile() devrait te retourner le File, puis le getName le nom du fichier, non ?
Ca fait un moment que j'ai pas fait de Java et je ne connais pas ça très bien, mais il me semble que c'est ça ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Non ça ne fonctionne pas.

getResource("ressources/base.xml" ).getFile() retourne une string : le chemin complet du fichier, et pas le fichier. Et cela ne correspond même pas au nom du fichier (dont j'ai aussi besoin), car cela renvoie le chemin complet (C: /......./ressources/base.xml) et pas ressources/base.xml tout court !

J'ai continué à chercher mais je n'ai toujours pas la solution pour obtenir le Fichier et le Nom de ce xml en utilisant les getResource
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Hmm, si tu veux un File, en faisant un getResource à la place de getResourceAsStream, tu dois pouvoir faire un getFile() dessus.
  1. getResource("ressources/base.xml").getFile()


Et depuis ton File, tu dois pouvoir avoir le nom en appelant getName()
  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par JohnSheppard.
  • Commenter cette réponse |
Score
0
òh
òi
|
Autant pour moi j'avais fait une faute de frappe dans le chemin !

Super ça marche maintenant (dans netbeans ET dans le jar) merci beaucoup !!!

Par contre j'ai une autre question :

comment puis-je récupérer le fichier ainsi que le nom du fichier à partir de ces getResource ?

Par exemple, plus loin dans le code, j'ai besoin d'appeler une fonction qui prend en paramètre le fichier base.xml et son nom, donc un File et une String.

J'avais trouvé une solution mais je retombais à nouveau sur le problème du .jar ...

Donc j'imagine que je dois utiliser la même chose (les getResource etc...)

Comment faire ? C'est le genre d'outils dont je n'ai pas trop l'habitude de me servir je ne comprends pas trop ce que je fais en fait...

  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
C'est une exception que tu reçois par ton xpath.evaluate()
Et quel est le message d'erreur ? Ca doit certainement être que le fichier XML est null?
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour et merci pour cette réponse !

Alors j'ai essayé, mais le programme renvoie l'erreur suivante :
javax.xml.xpath.XPathExpressionException
que je ne comprends pas ^^

Enfin j'imagine qu'il ne trouve pas le fichier xml, donc il ne peut pas faire la suite...

Je me trompe ?
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS