Illegal Argument Exception
Bonjour à tous,
Je souhaite importer des images pour en faire des sprites via la classe ImageIO mais ça me lance une exception quand je run mon programme Je comprends donc que ma méthode ne trouve pas mes inputs même si le chemin me semble bon. Je suis censé recupere mes images sur JFrame
Voici mon code :
Et voici l'arbo de mon projet :
📦src
┣ 📂main
┃ ┣ 📂java
┃ ┃ ┣ 📂com
┃ ┃ ┃ ┣ 📂rpg
┃ ┃ ┃ ┃ ┣ 📂entity
┃ ┃ ┃ ┃ ┃ ┣ 📜Entity.java
┃ ┃ ┃ ┃ ┃ ┗ 📜Player.java
┃ ┃ ┃ ┃ ┣ 📜.DS_Store
┃ ┃ ┃ ┃ ┣ 📜GamePanel.java
┃ ┃ ┃ ┃ ┣ 📜KeyHandler.java
┃ ┃ ┃ ┃ ┗ 📜Main.java
┃ ┃ ┃ ┗ 📜.DS_Store
┃ ┃ ┗ 📜.DS_Store
┃ ┗ 📜.DS_Store
┣ 📂res
┃ ┣ 📂player
┃ ┃ ┣ 📜boy_down_1.png
┃ ┃ ┣ 📜boy_down_2.png
┃ ┃ ┣ 📜boy_left_1.png
┃ ┃ ┣ 📜boy_left_2.png
┃ ┃ ┣ 📜boy_right_1.png
┃ ┃ ┣ 📜boy_right_2.png
┃ ┃ ┣ 📜boy_up_1.png
┃ ┃ ┗ 📜boy_up_2.png
┃ ┗ 📜.DS_Store
┣ 📂test
┃ ┗ 📂java
┃ ┃ ┗ 📂com
┃ ┃ ┃ ┗ 📂rpg
┃ ┃ ┃ ┃ ┗ 📜AppTest.java
┗ 📜.DS_Store
28 Replies
Gradle/maven ou c'est à la main que tu build/run ?
Suffit de build le jar pour voir si le path dedans est le bon vers tes images
Sous Maven
Ben j'ai une extension qui me permet de copier la path en absolu ou en relatif donc je peux pas me tromper
vérifie dans le jar
Ouais je te confirme que j'ai pas mes images dans mon snapshot, par contre je savais pas qu'on pouvait build un jar avec une exception lancée dans notre programme
Bon apparemment, il faut modifier le classpath directement dans le
pom.xml
en ajoutant ceci :
Mais ça ne change rien à vrai dire ça me change tout le chemin de mon projetsi l'exception est au runtime c'est normal
Ok, j'ai cependant toujours le même problème, jpp
Pour que tes fichiers soit inclus dans le .jar il faut soit que tu redéfinisse le chemin vers les ressources comme tu a essayé de faire, soit que tu mette tes resources a l'emplacement prévu par défaut, c'est a dire
src/main/resources/
Si tu n'arrive pas a changer le chemin vers les resources, essaie de déplacer tes fichier dans le dossier de ressource par défaut.Alors je suis pas trop habitué au jar mais si mes fichiers png ne sont pas inclus dans mon .jar ça veut dire que mon classpath est pas bon ?
J'ai déjà essayé de glisser mon dossier dans mon folder resources mais j'ai toujours la même erreur
Enfin exception, mais je comprends pas trop parce qu'apparement si je fais appel getClass, c'est qu'il est normalement inclus dans mon classpath, non ?
Mais si je fais
Ça me me leve pas mon exception
Si tu fait
getClass().getResourceAsStream
il vas chercher dans ton .jar.
ImageIO.read() cherche dans tes fichiers.Ok dès que je rentre je vais retenter ImageIO.read en chemin relatif
Si tes fichier .png ne sont pas inclu dans ton .jar, ça n'as pas d'impacte sur le class path des classes java. Ca veux juste dire que tu ne peu plus accédé au images dans n'importe quelles circonstances.
En chemin relatif ça dervai marcher tant que ton .jar est lancer dans le même dossier que
res/
, mais tu ne pourra plus partager le .jar a d'autre utilisateurs sans inclure les images a coté.
D'où l’intérêt de mettre tes resources dans src/main/resources/
Tu as essayé ?Quand tu parles de ressources, tu parles de l'ensemble de mon dynamique ?
Je parle de ce que tu a mis dans res/
Mais oui j'ai testé mais tu me proposes bien de faire un ImageIO.read pour le coup ?
Alors dans mon arborescence ça reste comme tel
📦src
┣ 📂main
┃ ┣ 📂java
┃ ┃ ┣ 📂com
┃ ┃ ┃ ┣ 📂rpg
┃ ┃ ┃ ┃ ┣ 📂entity
┃ ┃ ┃ ┃ ┃ ┣ 📜Entity.java
┃ ┃ ┃ ┃ ┃ ┗ 📜Player.java
┃ ┃ ┃ ┃ ┣ 📜.DS_Store
┃ ┃ ┃ ┃ ┣ 📜GamePanel.java
┃ ┃ ┃ ┃ ┣ 📜KeyHandler.java
┃ ┃ ┃ ┃ ┗ 📜Main.java
┃ ┃ ┃ ┗ 📜.DS_Store
┃ ┃ ┗ 📜.DS_Store
┃ ┗ 📜.DS_Store
┣ 📂res
┃ ┣ 📂player
┃ ┃ ┣ 📜boy_down_1.png
┃ ┃ ┣ 📜boy_down_2.png
┃ ┃ ┣ 📜boy_left_1.png
┃ ┃ ┣ 📜boy_left_2.png
┃ ┃ ┣ 📜boy_right_1.png
┃ ┃ ┣ 📜boy_right_2.png
┃ ┃ ┣ 📜boy_up_1.png
┃ ┃ ┗ 📜boy_up_2.png
┃ ┗ 📜.DS_Store
┣ 📂test
┃ ┗ 📂java
┃ ┃ ┗ 📂com
┃ ┃ ┃ ┗ 📂rpg
┃ ┃ ┃ ┃ ┗ 📜AppTest.java
┗ 📜.DS_Store
Soit tout tes .png dans
resources/
et tu utilise getClass().getResourceAsStream(...)
. A mon avis c'est la meilleure option.
Soit tu a les .png dans un autre dossier et tu utilise ImageIO.read(new File(...))
.