Probleme bei ImageIO.read (?!)

BooWseR

Mitglied
Hallo Leute,

ich hatte in Java ein kleines Spiel geschrieben und dafür das Applet genutzt. Nun muss ich mich davon wieder trennen, da meinem Prof das ganz und gar nicht gepasst hat. Nun erbe ich von JPanel und die Probleme fangen an. Ich habe eine kleine Methode geschrieben um die Bilder einlesen zu können, bekomme beim Ausführen jedoch eine NullPointer, drum habe ich die Vermutung, dass mit meiner Methode irgendwas im Argen liegt. ;(

Wäre super, wenn ihr euch das mal anschauen könntet:
Klick für Pastebin

//edit
Ich habe testweise einen Versuch mit new File gewagt, das gehört wieder gestrichen. Eigentlich muss es heißen:

Java:
bild = ImageIO.read(pic_url);

Hoffnungsvolle Grüße,
BooWseR :toll:



Und wen es interessiert: Hier, was meine Konsole auswirft:
Code:
Exception in thread "Thread-3" java.lang.NullPointerException
	at hsb_KneeDeepInTheBlood.StartingClass.run(StartingClass.java:92)
	at java.lang.Thread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at hsb_KneeDeepInTheBlood.StartingClass.paintComponent(StartingClass.java:211)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JLayeredPane.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
	at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
	at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
	at java.awt.Container.paint(Unknown Source)
	at java.awt.Window.paint(Unknown Source)
	at javax.swing.RepaintManager$3.run(Unknown Source)
	at javax.swing.RepaintManager$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.access$1100(Unknown Source)
	at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 
Zuletzt bearbeitet:
Was sollen hier die Gänsefüßchen?

Java:
bild = ImageIO.read(new File("pic_url"));
 
Leider habe ich keinen blassen Schimmer, wie das geht. Hab nie gelernt damit umzugehen, sollte wohl aber scheinbar in Eigenarbeit erfolgen. Leider habe ich auch keinen Schimmer von dem Debugger, habe aber mal auf gut Glück ein wenig rumgeklickt. Dabei ist mir aufgefallen, dass bei der pic_url, also dem Pfad mit einem /C:/ begonnen wird. Gehört ein Slash vor das C? Wüsste aber so nicht was ich falsch gemacht habe. Auch kann ich nicht wirklich erkennen was er in das "bild" nun geladen hat. Es steht zumindest nicht "null" dort.

Es steht bei "bild" BufferedImage (Id=44). Darunter ImageType 12. Würde doch bedeuten, dass zumindest ein Bild geladen wurde, oder? :bahnhof:
 
welche Ausgabe erhälst du denn wenn du das laden des Bildes wie bereits erwähnt mal in einen Try/Catch block packst ?

Wenn nun eine besagte Ausnahme eintritt und eben kein Bild geladen werden kann, weil z.B der Pfad nicht mit der Datei übereinstimmt, kannst du zumindest an der Konsolenausgabe erkennen warum und wo die Exception geworfen wird.

Java:
try{
   bild = ImageIO.read(pic_url);
}
catch(IOException ex){
   ex.printStackTrace();
}
 
Zuletzt bearbeitet:
Das habe ich bereits drin. Nur kann ich nicht erkennen, was geworfen wird, wenn überhaupt was geworfen wird. Die Konsole spuckt unverändert aus, was ich oben im Spoiler hab.

Mit 2 Breakpoints habe ich auch gesehen, dass etwas geladen wird. Die Größe des Bildes konnte ich gerade so noch rauslesen, sprich es wird wohl das richtige geladen. Vielleicht liegt es auch gar nicht an der Methode, der Fehler kommt ja erst bei g.drawImage(background, bg1.getBgX(), bg1.getBgY(), this);

Nur war daher mein Gedanke, dass er eben nichts zum Zeichnen hat und deshalb die Exception wirft. ???:L

//edit
Ok, ich glaube ich war ein wenig blöd und habe in meinem "Löschwahn" die Initialisierung des Hintergrundes gleich mit rausgeworfen. Nachdem ich die beiden get durch Zahlen ersetzt hatte springt der Fehler weiter. Ich lass das Thema vorerst offen, sofern sich meine Vermutung komplett bestätigt close ich das. Trotzdem sage ich schon mal Danke :applaus:
 
Zuletzt bearbeitet:
Exception in thread "Thread-3" java.lang.NullPointerException
at hsb_KneeDeepInTheBlood.StartingClass.run(StartingClass.java:92)
at java.lang.Thread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at hsb_KneeDeepInTheBlood.StartingClass.paintComponent(StartingClass.java:211)

Hier steht doch schon genau wo und was das Problem ist .... nämlich eine geworfene NPE und zwar in Zeile 92 bzw. 211 der Klasse StartingClass einmal in deren run() Methode und einmal bei paintComponent.

Vermutlich hast du ein Panel etc vielleicht nicht initialisiert ?! Poste mal die Klasse StartingClass.java aus dem Package KneeDeepInTheBlood
 
Zuletzt bearbeitet:
Richtig, ich habe nicht Initialisiert. Ich habe die gesamte Annotation "Start" von dem Panel rausgeworfen und nur die Bilder wieder hinzugefügt. Hatte nur vermutet, dass er bei dem Image das Problem hat und nicht bei dem bg1.get*. Manchmal sieht man vor lauter Bäumen einfach den Wald nicht mehr... 😳
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben