После компиляции моего приложения в Netbeans и запуска приложения в Netbeans оно работает просто отлично.
Все изображения загружаются нормально.
Попытка двойного щелчка запустить приложение приводит к тому, что ничего не происходит.
Попытка запуска из командной строки выдает эту ошибку:
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)
Компиляция вне Netbeans не оставляет ошибок, и выполнение в порядке.
После проб и ошибок комментирования я пришел к этим анонимным вызовам Актера, который вызывает проблему. Вот функция кода, которая при закомментировании не выдает исключение. Я не могу найти что-то не так с этим.
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));
}
}
}
Я отследил эту ошибку до BufferedImage в моем 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;
}
}
После удаления функции loadImage и загрузки изображения следующим образом:
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);
}
Получена новая ошибка:
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)