En essayant de charger l'image à l'aide de ImageIO.lire(de la classe.getResource(URL)) mais getResource retourne null
Que j'ai été faire un jeu en 2D avec mon copain et j'ai appris beaucoup de choses sur certains jeu de base dev concepts par le biais de certains de Youtube des tutoriels. Une des choses que j'apprenais est des sprites (pour ceux qui ne connaissent pas, des images 2D en images de rendu à l'écran) et comment les utiliser dans mon jeu. J'ai été en utilisant ImageIO.read(this.class.getResource(pathToMySprite))
mais il semble que getResource()
est de retour null
pour une raison quelconque.
J'ai été vissage avec le chemin de un peu, en ajoutant "/" en face d'elle, la suppression de "/", plaçant l'utilisateur.dir de la propriété pour voir si elle a besoin de l'ensemble de la voie, et je suis toujours la même erreur.
TILE_TEXTURES(System.getProperty("user.dir") + "/textures/tile.png");
//ENTITY_TEXTURES("/textures/entity.png");
private BufferedImage img;
private SpriteSheet(String path) {
System.out.println(System.getProperty("user.dir"));
try {
//TODO: Fix this error, don't know what's wrong.
img = ImageIO.read(SpriteSheet.class.getResource(path)); //error here!!!
} catch (IOException e) {
e.printStackTrace();
}
}
public BufferedImage getImage() {
return img;
}
Toute aide est appréciée.
Je n'ai pas été en commentant le code (j'ai l'habitude de le faire quand j'arrive à l'endroit où je peux m'asseoir en arrière et être heureux avec ce que j'ai fini), mais c'est une jolie petite classe donc je pense que vous les gars seront en mesure de comprendre ce qu'il se passe très bien.
Le dossier qui contient l'image EST dans le chemin de classe de mon projet.
J'ai aussi inclus le message d'erreur:
Exception in thread "Thread-2" java.lang.ExceptionInInitializerError
at com.brickbattle.client.src.gui.Sprite.<clinit>(Sprite.java:7)
at com.brickbattle.client.src.objs.Tile.<init>(Tile.java:67)
at com.brickbattle.client.src.objs.Player.initPlayerNum(Player.java:19)
at com.brickbattle.client.src.util.BrickBattle.init(BrickBattle.java:114)
at com.brickbattle.client.src.util.BrickBattle.run(BrickBattle.java:85)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: input == null! //HERE IS ERROR
at javax.imageio.ImageIO.read(Unknown Source)
at com.brickbattle.client.src.gui.SpriteSheet.<init>(SpriteSheet.java:17)
at com.brickbattle.client.src.gui.SpriteSheet.<clinit>(SpriteSheet.java:8)
Merci encore!
Au lieu d'utiliser
this.class.getResource()
essayer getClass().getResource()
OriginalL'auteur user2466959 | 2013-06-08
Vous devez vous connecter pour publier un commentaire.
Ce problème est fondamentalement étrangers à ImageIO, mais plutôt de la façon dont
Class
/ClassLoader.getResource
ougetResourceAsStream
œuvres.Pour une explication, voir cette réponse.
Dans tous les cas, ces différentes façons d'obtenir une ressource ne seront en mesure de lire le classpath (ie.
user.dir
ne sera jamais aider ici).Cela devrait fonctionner:
Où le chemin est relatif à la racine du classpath (spécifié par le leader /).
Si vos ressources ne sont pas sur le chemin de la classe, il suffit d'utiliser:
Où le chemin est relatif au répertoire de votre application a été lancé à partir de.
OriginalL'auteur haraldK