2016-12-05 4 views
0

Ich versuche, mehrere Bilder in ein Array zu laden. Aber aus irgendeinem Grund bekomme ich eine NullPointerExeption, wenn ich versuche, das eigentliche Laden (ImageIO.read()) zu machen. Ich kann nicht sehen, was falsch ist, wahrscheinlich weil ich zu sehr damit herumgespielt habe, dass ich für den Fehler blind geworden bin. Dies ist die Schleife, die die Bilder zu laden versucht:Laden von Bildern in ein Array

for (int i = 0; i <= 1; i++) { 
     try { 
      image[i] = ImageIO.read(new File(String.format("TDs/TD%d.png", i))); 
      bg[i] = ImageIO.read(new File(String.format("BGs/BG%d.png", i))); 
     } catch (IOException e) { 
     } 
    } 

Ich habe derzeit nur zwei Bilder zwischen schalten, aber ich werde das bald ändern.

Das Gemälde geschieht

g2d.drawImage(bg[1], 0, 0, null); 

mit beiden Variablen initialisiert werden von

Image[] image, bg; 

Und last but not least Beweis dafür, dass alle Bilder dort tatsächlich

here

gefunden Danke, dass du einer dummen Person geholfen hast.


EDIT: Vielen Dank für die Antworten, als Initialisierung der Array funktioniert so! Ich fühle mich jetzt wie ein Idiot, seit ich mir alle anderen Array-Inits angeschaut habe, um herauszufinden, dass sie genau so initialisiert wurden, wie du es mir gesagt hast ... Entschuldige, dass du dir die Zeit genommen hast!

PS: Keine Notwendigkeit, IOExeceptions zu behandeln, da diese Texturen für ein Spiel sind - sie ändern sich nicht und Sie können/sollten sie auch nicht ändern. Ich werde eine Messagebox mit einer Nachricht hinzufügen, falls jemand beschließt, trotzdem herumzualbern.

+1

sollten Sie auch die ioexception behandeln und nicht einfach ignorieren – XtremeBaumer

Antwort

1

Sie müssen ein neues Array erstellen. Sie erklären nur das Array wie folgt:

Image[] image; 

Aber speichern Elemente im Array Sie es wie so initialisiert werden müssen:

Image[] image = new Image[2] // value count 

Für Ihr Beispiel könnten Sie versuchen, diese

int imageCount = 2; 
Image[] image = new Image[imageCount]; 
for (int i = 0; i < imageCount; i++) { 
    try { 
     image[i] = ImageIO.read(new File(String.format("TDs/TD%d.png", i))); 
     bg[i] = ImageIO.read(new File(String.format("BGs/BG%d.png", i))); 
    } catch (IOException e) { 
    } 
} 

Oder als Alternative, wenn Sie nicht ' Sie wissen, wie viele Werte Sie speichern möchten. Sie könnten eine ArrayList verwenden. Wie so:

ArrayList<Image> images = new ArrayList<>(); 

//add image 
images.add(ImageIO.read(new File(String.format("TDs/TD%d.png", i)))); 
0

Wenn Sie eine Reihe von Bildern initialisiert wird, könnten Sie versuchen wollen, so etwas zu tun:

Image[] image = new Image[2]; //or replace 2 by the amount of images you will be loading. 
Image[] bg = new Image[2]; //same for this one. 

diese Weise wird das Array richtig initialisiert wird.