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:
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.
Außerdem zeichne ich die Hitbox mit:
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:
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);
Java:
g.drawRect(getX(), getY(), getImage().getWidth(), getImage().getHeight());
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)