NullPointer Exception beim Laden von Bildern

System.exit(0)

Aktives Mitglied
Hallo zusammen,

ich habe eine Klasse, in der ich BufferedImages laden möchte.
Dafür wird ein File f übergeben.

Allerdings bekomme ich beim Auslesen der Bildgröße nach dem Laden ein NullPointer-Exception.

Ich kann aber nicht feststellen warum:
- die Methode f.isfile() ergibt true
- System.out.println(image) schreibt auch jede Menge Infos zum bufferedimage

Wo liegt mein Problem?

Code:
public class Picture {
  private BufferedImage image;
  private String name;
  private Point size;
   
  public Picture(File f) throws IOException
  {
  System.out.print("Picture - Klasse FileTest: " + f.isFile()+ "\n");
  image = ImageIO.read(f);
  System.out.println(image);
  name = f.getName();
  size = new Point(image.getWidth(), image.getHeight());
   
  }

Fehler:
Code:
Exception in thread "main" java.lang.NullPointerException
   at planetarydefense.Picture.<init>(Picture.java:30)
   at planetarydefense.SpielSteuerung.<init>(SpielSteuerung.java:61)
   at planetarydefense.PlanetaryDefense.initialisieren(PlanetaryDefense.java:82)
   at planetarydefense.PlanetaryDefense.<init>(PlanetaryDefense.java:48)
   at planetarydefense.PlanetaryDefense.main(PlanetaryDefense.java:61)

Debugausdruck:
Code:
Picture - Klasse FileTest: true
BufferedImage@439f5b3d: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space = java.awt.color.ICC_ColorSpace@1d56ce6a transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width = 48 height = 48 #numDataElements 4 dataOff[0] = 3
Picture - Klasse FileTest: true
BufferedImage@17f052a3: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space = java.awt.color.ICC_ColorSpace@1d56ce6a transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width = 32 height = 32 #numDataElements 4 dataOff[0] = 3

Danke
 
Schon klar.
Aber warum ist es null, wenn a tatsächlich eine Bilddatei mit File f übergeben wird.
Vor allem ist kurios, das System.out.printl(image) ein Ergebnis liefert. Damit kann image doch gqar nicht null sein. Woher sollten sonst die Infos kommen?

Gruß

System.exit(0)
 
Hallo

Zeile 30 ist
Code:
size = new Point(image.getWidth(), image.getHeight());

Die NPE kommt nach den Debugausgaben im Debugfenster.
Deswegen bin ich ja verwirrt.
 
Also eigentlich ist das unmöglich. Zerleg die Zeile doch ml in Ihre Einzelteile und mach erstmal ein int width = image.getWidth()
Sicher das das der gesamte Code ist und Du uns nicht irgendwas vorenthälst?
 
Hallo Harry Kane,

nachdem du mir bestätigt hattest, dass das eigentlich kein NPE sein kann, habe ich noch ein paar Extradebugzeilen eingesetzt und den Fehler, gleube ich gefunden:
Code:
Bild Nr.: 5
Bildname: red2.png
Picture - Klasse FileTest: true
BufferedImage@238e0d81: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space = java.awt.color.ICC_ColorSpace@1d56ce6a transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width = 48 height = 48 #numDataElements 4 dataOff[0] = 3
48 Breite des Bildes
Bild Nr.: 6
Bildname: Thumbs.db
Picture - Klasse FileTest: true
null
Wie du siehst, ist "Bild" Nr. 6 keine Bilddatei.
Deshalb ergbit der Test, ob es ein File ist zwar "true", es kann aber kein Bufferedimage geladen werden, da *.db kein Bildformat ist.
Also muss ich noch auf die Endung PNG, GIF und JPG testen, um sicher zu sein, dass es keine Fehler gibt.

mfg

System.exit(0)
 
Nachdem du mir bestätigt hattest, dass das eigentlich kein NPE sein kann
Ach habe ich das bestätigt?
Mir ging es eher darum, rauszufinden, wie es sein kann, das die Eigenschaften des Bildes korrekt gesysoutet werden, aber trotzdem danach aber eine NPE fliegt. Mein Verdacht war, dass eine Fehlinterpretation des stack traces vorliegt, die korrekten sysouts sowie die NPE zu verschiedenen Dateien gehören und dementsprechend zuerst die korrekten sysouts kommen (bei den richtigen Bildern) und dann die NPE (bei der ersten "falschen" Datei).
Naja, scheinbar hats dich ja doch auf den richtigen Weg gebracht.
 

Zurück
Oben