Après avoir compilé mon application dans Netbeans et exécuté l'application dans Netbeans, cela fonctionne très bien.NullPointerException
Toutes les images se chargent bien. Si vous essayez de double-cliquer, l'exécution de l'application n'aboutit à rien.
course Essayer de la ligne de commande donne cette erreur:
Exception in thread "main" java.lang.NullPointerException
at Entity.<init>(Entity.java:24)
at Actor.<init>(Actor.java:5)
at TileEngine.drawMap(TileEngine.java:52)
at GraphicsCanvas.<init>(GraphicsCanvas.java:32)
at Main.<init>(Main.java:22)
at Main.main(Main.java:18)
en dehors de Netbeans Compiler laisse aucune erreur et de l'exécution est très bien. Après l'essai et l'erreur de commenter je suis venu à ceux-ci l'appel anonyme à l'acteur qui cause le problème. Voici la fonction du code qui, lorsqu'il est mis en commentaire, ne lance pas l'exception. Je ne peux pas sembler trouver quelque chose de mal avec cela.
public class Actor extends Entity
{
Actor(String filename, int x, int y)
{
super(filename, x, y);
}
}
void drawMap(String imgWalkable, String imgNotWalkable, GraphicsCanvas gp)
{
// Since each 1 tile is a tile that can be walked on
// we need to set the 1 tile to something you can walk on.
// The tiles that cannot be walked on are the ones that are 0
for (int x = 0; x < WID; x++)
{
for (int y = 0; y < HEI; y++)
{
if (GRID[x][y] == 1)
gp.add(new Actor(imgWalkable, x * TILE_WID, y * TILE_HEI));
//else
//gp.add(new Actor(imgNotWalkable, x * TILE_WID, y * TILE_HEI));
}
}
}
J'ai encore tracé cette erreur à BufferedImage dans ma classe Entity
.
public class Entity extends JLabel
{
Entity(String filename, int x, int y)
{
this.x = x;
this.y = y;
this.setLocation(this.x, this.y);
bImg = loadImage(filename);
this.setSize(bImg.getWidth(), bImg.getHeight());
ImageIcon icon = new ImageIcon(bImg);
setIcon(icon);
}
public BufferedImage loadImage(String filename) {
BufferedImage tmp = null;
try {
tmp = ImageIO.read(getClass().getResource(filename));
} catch (Exception e) { }
return tmp;
}
}
Après avoir retiré la fonction loadImage et au lieu de charger l'image comme ceci:
Entity(String filename, int x, int y)
{
try {
bImg = ImageIO.read(getClass().getResource(filename)); //LINE 25
} catch (IOException ex) {
Logger.getLogger(Entity.class.getName()).log(Level.SEVERE, null, ex);
}
this.x = x;
this.y = y;
this.setLocation(this.x, this.y);
//bImg = loadImage(filename);
//loadImage(bImg, filename);
this.setSize(bImg.getWidth(), bImg.getHeight());
Icon icon = new ImageIcon(bImg);
setIcon(icon);
setVisible(isAlive);
}
Cette nouvelle erreur est reçu:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1362)
at Entity.<init>(Entity.java:25)
@trashgod: Ce problème a été résolu. –
Le problème réside dans ma classe TileEngine –
Les NPE sont faciles à trouver et à corriger. L'exception vous indique exactement la ligne dans laquelle le NPE s'est produit. Utilisez votre approche de débogage préférée (et votre «pensée critique») à partir de là. Je recommanderais d'apprendre à utiliser un débogueur qui vous permet d'inspecter l'état et de "passer" par le code. –