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
exception in thread "main" java.lang.IllegalArgumentException: input == null!
exception in thread "main" java.lang.IllegalArgumentException: input == null!
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 :
public void getPlayerImage(){
try{

up1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_up_1.png"));
up2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_up_1.png"));
down1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_down_1.png"));
down2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_down_2.png"));
left1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_left_1.png"));
left2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_left_2.png"));
right1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_right_1.png"));
right2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_right_2.png"));

}catch(IOException e){
e.printStackTrace();
}

}
public void getPlayerImage(){
try{

up1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_up_1.png"));
up2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_up_1.png"));
down1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_down_1.png"));
down2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_down_2.png"));
left1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_left_1.png"));
left2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_left_2.png"));
right1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_right_1.png"));
right2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_right_2.png"));

}catch(IOException e){
e.printStackTrace();
}

}
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
! αℓωүη974
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
NoSung
NoSung5mo ago
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
! αℓωүη974
vérifie dans le jar
NoSung
NoSung5mo ago
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 :
<resources>
<resource>
<directory>src/main/java/com/rpg</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
</resources>
<resources>
<resource>
<directory>src/main/java/com/rpg</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
</resources>
Mais ça ne change rien à vrai dire ça me change tout le chemin de mon projet
Ayfri
Ayfri5mo ago
si l'exception est au runtime c'est normal
NoSung
NoSung5mo ago
Ok, j'ai cependant toujours le même problème, jpp
hydrolien
hydrolien5mo ago
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.
NoSung
NoSung5mo ago
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
up1 = ImageIO.read(new File("res/player/boy_up_1.png"));
up2 = ImageIO.read(new File("res/player/boy_up_2.png"));
down1 = ImageIO.read(new File("res/player/boy_down_1.png"));
up1 = ImageIO.read(new File("res/player/boy_up_1.png"));
up2 = ImageIO.read(new File("res/player/boy_up_2.png"));
down1 = ImageIO.read(new File("res/player/boy_down_1.png"));
Ça me me leve pas mon exception
hydrolien
hydrolien5mo ago
Si tu fait getClass().getResourceAsStream il vas chercher dans ton .jar. ImageIO.read() cherche dans tes fichiers.
NoSung
NoSung5mo ago
Ok dès que je rentre je vais retenter ImageIO.read en chemin relatif
hydrolien
hydrolien5mo ago
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é ?
NoSung
NoSung5mo ago
Quand tu parles de ressources, tu parles de l'ensemble de mon dynamique ?
hydrolien
hydrolien5mo ago
Je parle de ce que tu a mis dans res/
NoSung
NoSung5mo ago
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
hydrolien
hydrolien5mo ago
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(...)).
Want results from more Discord servers?
Add your server