Java Nullpointer Exception in 2D-Spiel Snake

chaostheory

Bekanntes Mitglied
Hallo,
wie der Titel schon sagt, arbeite ich momentan an dem Handy-Spiel Snake in Java. Der Compiler übersetzt das Problem fehlerlos, sobald ich es ausführe kommt allerdings eine Java Nullpointer Exception.
Mein Konzept: Es gibt eine Klasse Snake, die ein einfaches Rechteck zeichnet (arbeite mit SuM-Bibliotheken, das sind einfache Lernbibliotheken). Um die Schlange zu bewegen, wird vorne ein neues Objekt der Klasse Snake erzeugt und angehängt (also ein Rechteck) und das hinterste Rechteck wird gelöscht.
Hoffe jemand kann mir helfen :rtfm:

Code meiner Methode bewege:

[JAVA=101]public void bewege()
{
switch(zRichtung)
{
case 1: hatvordereSnake.zNachfolger=new Snake(hatvordereSnake.hPosition()+zSpeed,
hatvordereSnake.vPosition(), kGröße);
hatvordereSnake=hatvordereSnake.nachfolger();
break;
case 2: hatvordereSnake.zNachfolger=new Snake(hatvordereSnake.hPosition(),
hatvordereSnake.vPosition()+zSpeed, kGröße);
hatvordereSnake=hatvordereSnake.nachfolger();
break;
case 3: hatvordereSnake.zNachfolger=new Snake(hatvordereSnake.hPosition()-zSpeed,
hatvordereSnake.vPosition(), kGröße);
hatvordereSnake=hatvordereSnake.nachfolger();
break;
case 4: hatvordereSnake.zNachfolger=new Snake(hatvordereSnake.hPosition(),
hatvordereSnake.vPosition()-zSpeed, kGröße);
hatvordereSnake=hatvordereSnake.nachfolger();
break;
}
hatloescheSnake=hathintereSnake;
hathintereSnake=hatloescheSnake.nachfolger();
hatloescheSnake.loesche();
}[/code]

Ich benutze hatvordereSnake, hathintereSnake und hatloescheSnake.
hatvordereSnake ist das Rechteck am Anfang und dient als Orientierung für ein neues Rechteck, damit es weiß, wo es hin muss.
hathintereSnake ist das letzte Rechteck, das gelöscht werden soll.
hatloescheSnake ist nur ein Übergangswert, in ihm wird das letzte Rechteck gespeichert.
Dann wird hatletzteSnake der Nachfolger vom letztenRechteck und das letzteRechteck wird gelöscht.

Bei der Zeile [JAVA=123]hathintereSnake=hatloescheSnake.nachfolger();[/code] kommt allerdings immer eine NullpointerException. Habe ich da irgendwas falsch gemacht?

PS: Für Kritik am Konzept wäre ich dankbar 🙂
 
Zuletzt bearbeitet:
Kopier doch mal den StackTrace in einen [noparse]
Code:
[/noparse]-Block! Welche Zeilennummer hat denn die Methode [c]bewege()[/c] in der Originaldatei?

Anbei: Du kannst auch die [noparse][code=Java][/noparse]-Blöcke gleich mit der richtigen Zeilennummer anfangen lassen, indem Du [noparse][java=42]QUELLTEXT
[/noparse] schreibst. Das ist immer gut, wenn man sich Exception StackTraces ansehen will:
[java=42]QUELLTEXT[/code]

Ebenius
 
wenn der Fehler wirklich in dieser Zeile kommt
Java:
hathintereSnake=hatloescheSnake.nachfolger();
dann liegt es daran dass hathintereSnake null ist.
Führst du die Funktion bewege() aus bevor du der Variable hathintereSnake einen Wert zuweist?
 
Stack Trace:
Code:
java.lang.NullPointerException
	at Schlangenbeschwörer.bewege(Schlangenbeschwörer.java:124)
	at Schlangenbeschwörer.agiere(Schlangenbeschwörer.java:93)
	at Schlangenbeschwörer.<init>(Schlangenbeschwörer.java:39)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at bluej.runtime.ExecServer$3.run(ExecServer.java:790)
java.lang.NullPointerException
	at Schlangenbeschwörer.bewege(Schlangenbeschwörer.java:123)
	at Schlangenbeschwörer.agiere(Schlangenbeschwörer.java:93)
	at Schlangenbeschwörer.<init>(Schlangenbeschwörer.java:39)
	at Hauptprogramm.main(Hauptprogramm.java:5)


Eigentlich sind alle schon einem Wert zugewiesen, hathintereSnake, hatvordereSnake und hatloescheSnake...
 
Habe mal ein bisschen länger gegoogelt und nach ein bisschen probieren die Lösung gefunden. Der Nachfolger von hatloescheSnake war noch nicht deklariert...
 
Du meinst hatloescheSnake ?

Ebenius
nein ich meine hathinteresnake, weil er vorher hatloeschesnake=hathinteresnake; zuweist.
Aber natürlich ist das ganze immer eine Raterei wo der Fehler liegt, wenn der Topic start nur einen miniteil des codes postet und noch nicht mal einen StackTrace liefert.
 

Zurück
Oben