Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Interpreter-FehlerHilfestellung bei einer NullPointerException
Ich beschäftige mich seit einigen Wochen mit Java und habe nun ein Problem mit einer NullPointerException, ich finde einfach den Fehler nicht und würde mich natürlich freuen wenn ihr mir weiterhelfen könntet:
Ich bin dabei Pacman zu programmieren, und bisher läuft es auch ganz gut. Nachdem ich eine TileMap erstellt habe, wollte ich jetzt aus einer Map entsprechend den Farbcodes (schwarz , rot, grün...) entsprechende Texturen zuordnen. Die Map liest er auch entsprechend aus, jedoch bekomme ich scheinbar bei der if Abfrage einen Fehler. Dieser wird in Zeile 49 wirksam ???:L???:L
Wenn ich die if Abfrage in Zeile 30 herausnehme, bekomme ich auch keinen entsprechenden Fehler mehr. Nur wieso?
Java:
public class World {
private Player player;
private Tile[][] tiles;
static int level = 01;
private int tileWidth;
private int tileHeight;
public World() {
player = new Player(Config.MAIN_WIDTH / 2 - Config.OBJEKT_WIDTH / 2,
Config.MAIN_HEIGHT / 2 - Config.OBJEKT_HEIGHT / 2);
loadNextLevel();
}
public void loadNextLevel() {
BufferedImage map = Images.imageLoader("map01", "png");
tileWidth = map.getWidth();
tileHeight = map.getHeight();
tiles = new Tile[tileWidth][tileHeight];
for (int x = 0; x < tileWidth; x++) {
for (int y = 0; y < tileHeight; y++) {
Color c = new Color(map.getRGB(x, y));
if (c.getRed() == 0 && c.getGreen() == 0 && c.getBlue() == 0) {
tiles[x][y] = new Tile(x, y, 0);
}
}
}
}
public void update(float timeSinceLastFrame) {
player.update(timeSinceLastFrame);
}
public void draw(Graphics g) {
for (int x = 0; x < tileWidth; x++) {
for (int y = 0; y < tileHeight; y++) {
tiles[x][y].draw(g);
}
}
player.draw(g);
}
}
Ohne die if-Abfrage bekommt jede Position des Arrays ein Objekt "Tile" zugewiesen, mit halt nur diejenigen, auf welche die Bedingung zutrifft.
NullPointer bedeutet, dass du versuchst, aus einer leeren Stelle etwas zu nehmen. So als versuchtest du, aus einem leeren Glas zu trinken.
In Zeile 49 sind nicht alle Positionen initialisiert, deswegen knallts.
Lösungsmöglichkeiten fallen mir spontan zwei ein:
- bei Beginn das komplette Array initialisieren und erstmal mit "Dummy-Daten" füllen
- vor Zeile 49 eine Null-Abfrage machen und wenn notwendig die Stelle zuerst initialisieren
Java:
for (int x = 0; x < tileWidth; x++) {
for (int y = 0; y < tileHeight; y++) {
if(tiles[x][y] == null){
tiles[x][y] = new Tile(......);
}
tiles[x][y].draw(g);
}
}