Bild lädt nicht

.basti

Aktives Mitglied
Hallo zusammen,
in meinem Spiel gibts die Klasse Spielfiguren und die Klasse Spieler, welche von der ersten erbt. In Spielfiguren gibt die Variable BufferedImage img und zwei Methoden:
Java:
public BufferedImage getImage() {
        return img;
    }
Java:
public void setImage(BufferedImage img) {
        this.img = img;
    }

Da mir das irgendwann zu viel mit den ganzen Bildern wurde hab ich die Klasse IL angelegt welche alle Bilder für alle Klassen beeinhaltet und initialisiert. Mit der Methode load() wird dann jedes einzelne Bild ausgelesen.
In meinem Spieler Konstruktor setze ich also das Bild mit setImage() auf das gewünschte Bild und lasse es zeichnen.
Java:
setImage(IL.spielerRechts);
Außerdem zeichne ich die Hitbox mit:
Java:
g.drawRect(getX(), getY(), getImage().getWidth(), getImage().getHeight());
Komischerweise bekomme ich aber seitdem ich die Methode mit der IL Klasse verwende, also nicht in jeder Klasse einzeln das Bild auslese, eine NullPointerException die sagt, dass getImage() null wäre, was ja komisch ist, da ich im Konstruktor ja das Bild festgelegt habe.
Was ich auch nicht ganz nachvollziehen kann, ist, dass die Excpetion erst im zweiten Teil meiner draw Methode kommt:
[CODE lang="java" highlight="5"]@Override
public void draw(Graphics g) {
if(visible==true) {
g.drawImage(getImage(),getX(),getY(),null);
g.drawRect(getX(), getY(), getImage().getWidth(), getImage().getHeight());
}
}[/CODE]
Obwohl ich im ersten Teil ja auch die Methode getImage() aufrufe.

Weis da jemand weiter?
Hier noch die Fehlermeldung:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.awt.image.BufferedImage.getWidth()" because the return value of "ingame.Spieler.getImage()" is null
    at ingame.Spieler.draw(Spieler.java:31)
    at ingame.Spiel.paintComponent(Spiel.java:93)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5255)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
    at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5203)
    at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5013)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:865)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 
Vermutlich wird das Bild nicht geladen oder Du setzt die Variable nicht. Die Codeausschnitte reichen aber schlicht nicht aus, das zu sagen.

Sprich: Wenn die Variable mit setImage(IL.spielerRechts) gesetzt wird: Sicher, dass IL.spielerRechts nicht null ist?
Und sicher, dass Du Du es aus der gleichen Instanz ausliest, in der Du es auch gesetzt hast?

Das wären so die üblichen Verdächtigen in so einem Fall.
 

Neue Themen


Zurück
Oben