Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
Delphi 2005 Personal
|
-JAVA- Null Pointer Exception - wie abfangen
5. Mär 2005, 02:16
Hallo!
Arbeite an meiner Facharbeit (man das is echt übel...) und nun sitz ich hier mal wieder mit meinem JAVA-Mistzeug.
Ich entwickle Tetris und das spielt sich bekanntermaßen mit Steinen.
Mit folgender Methode erzeuge ich die Steine die aus mehreren Blöcken bestehen:
Code:
public void neuerStein()
{
int lTyp = hatRechner.ganzeZufallszahl(1,6);
int lFarbe = hatRechner.ganzeZufallszahl(1,12);
if(lFarbe == 11) { lFarbe = 10; } // keine weißen Steine bei weißem Hintergrund
switch(lTyp)
{
case 1: hatSteinliste.haengeAn(new Stein(205,180,lFarbe,new Stein(225,180,lFarbe,new Stein(245,180,lFarbe,null)))); hatSteinliste.erbitteStein().zeichneDich(); hatSteinliste.erbitteStein().bewegeDichAbwaerts(); break;
case 2: hatSteinliste.haengeAn(new Stein(205,180,lFarbe,new Stein(205,160,lFarbe,new Stein(205,140,lFarbe,null)))); hatSteinliste.erbitteStein().zeichneDich(); hatSteinliste.erbitteStein().bewegeDichAbwaerts(); break;
case 3: hatSteinliste.haengeAn(new Stein(205,180,lFarbe,new Stein(225,180,lFarbe,new Stein(245,180,lFarbe,new Stein(245,160,lFarbe,null))))); hatSteinliste.erbitteStein().zeichneDich(); hatSteinliste.erbitteStein().bewegeDichAbwaerts(); break;
case 4: hatSteinliste.haengeAn(new Stein(205,180,lFarbe,new Stein(225,180,lFarbe,new Stein(245,180,lFarbe,new Stein(205,160,lFarbe,null))))); hatSteinliste.erbitteStein().zeichneDich(); hatSteinliste.erbitteStein().bewegeDichAbwaerts(); break;
case 5: hatSteinliste.haengeAn(new Stein(205,180,lFarbe,new Stein(225,180,lFarbe,new Stein(205,160,lFarbe,new Stein(205,140,lFarbe,null))))); hatSteinliste.erbitteStein().zeichneDich(); hatSteinliste.erbitteStein().bewegeDichAbwaerts(); break;
case 6: hatSteinliste.haengeAn(new Stein(205,180,lFarbe,new Stein(225,180,lFarbe,new Stein(225,160,lFarbe,new Stein(225,140,lFarbe,null))))); hatSteinliste.erbitteStein().zeichneDich(); hatSteinliste.erbitteStein().bewegeDichAbwaerts(); break;
}
}
Er zeichnet mir jetzt auch schön meine Steine allerdings bekomme ich immer hässliche Null Pointer Exceptions und ich bin am Überlegen wie ich die Abfangen kann.
Meine Klasse Stein sieht wie folgt aus:
Code:
/*
Klasse: Stein
Autor: Florian Meier
*/
import sum.ereignis.*;
import sum.komponenten.*;
public class Stein
{
private final int kBreite = 20, kHoehe = 20;
private int zX, zY;
private Buntstift hatStift;
private Stein kenntStein;
private int zFarbe = 10;
public Stein(int pX, int pY, int pFarbe, Stein pStein)
{
hatStift = new Buntstift();
zFarbe = pFarbe;
hatStift.setzeFarbe(pFarbe);
hatStift.setzeFuellMuster(1);
zX = pX;
zY = pY;
kenntStein = pStein;
this.zeichneDich();
}
public void zeichneDich()
{
hatStift.normal();
hatStift.bewegeBis(zX, zY);
hatStift.runter();
hatStift.zeichneRechteck(kBreite, kHoehe);
hatStift.hoch();
}
public void verbergeDich()
{
hatStift.bewegeBis(zX,zY);
hatStift.radiere();
hatStift.zeichneRechteck(kBreite, kHoehe);
hatStift.hoch();
hatStift.normal();
}
public void bewegeDichAbwaerts()
{
this.verbergeDich();
zY += kHoehe;
this.zeichneDich();
if(!(kenntStein == null))
{
kenntStein.bewegeDichAbwaerts();
}
}
}
Und wenn ich das kompiliere dann spuckt mir der Compiler immer lustig "java.lang.NullPointerException" aus...
Ich würde gerne mal eure Meinung hören.
Ich bin mir nämlich nicht ganz sicher wo mein Fehler liegen soll.
Liegt es jetzt an diesem bösen, verschachtelten Erzeugen der Steine mit Übergabe von leeren Objekten oder ist es doch nen Problem mit der Liste. Die wiederum sollte sich auf diese Art und Weise nur den ersten Stein merken, der Rest ist ihr egal...
Kann gerne noch mehr Code posten wenn nötig.
Danke im Vorraus!
MFG Florian
P.S.: Keine blöden Kommentare zu Variablen- oder Funktionsnamen und den eingebundenen Klassen. Wir machen das mit "Stifte und Mäuse"...
|