Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   -JAVA- Null Pointer Exception - wie abfangen (https://www.delphipraxis.net/41558-java-null-pointer-exception-wie-abfangen.html)

flomei 5. Mär 2005 01:16


-JAVA- Null Pointer Exception - wie abfangen
 
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 :hi:

P.S.: Keine blöden Kommentare zu Variablen- oder Funktionsnamen und den eingebundenen Klassen. Wir machen das mit "Stifte und Mäuse"... :kotz:

mirage228 5. Mär 2005 06:44

Re: -JAVA- Null Pointer Exception - wie abfangen
 
Hi,

"Stifte und Mäuse" gibts auch für JAVA? :shock:
Wir machen dieses Zeug mit Delphi, ist genauso schlimm.

Aber nun zu Deinem Problem:
Hast Du versucht, das Programm schrittweise ausführen zu lassen, um den Ort der NullPointer-Exception ausfindig zu machen?
Edit: Was eventuell noch interessant wäre, ist die Klasse Steinliste.

mfG
mirage228

flomei 5. Mär 2005 21:35

Re: -JAVA- Null Pointer Exception - wie abfangen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sag mir wie ich bei RealJ ein Programm Schritt-für-Schritt ausführen lassen kann und ich will das gerne tun... ;)

Hier mal die Steinliste. Das ist eigentlich nur Typecasting deswegen häng ich die Liste gleich auch mal an...
Code:
public class Steinliste extends Liste
{
  public Stein erbitteStein()
  {
     return (Stein) super.erbitteAktuelles();
  }
}
MfG Florian :hi:

mirage228 6. Mär 2005 08:08

Re: -JAVA- Null Pointer Exception - wie abfangen
 
Zitat:

Zitat von flomei
Sag mir wie ich bei RealJ ein Programm Schritt-für-Schritt ausführen lassen kann und ich will das gerne tun... ;)

Du hast ne Java IDE, mit der man nicht schrittweise ausführen kann? :shock:
Da würde ich mir aber schnell ne bessere IDE besorgen (Eclipse oder eine andere kostenfreie...).

In der Liste konnte ich ansonsten beim ersten Anschauen keine Fehler finden. Also muss der Fehler wohl wo im Detail stecken...

mfG
mirage228

r_kerber 6. Mär 2005 09:52

Re: -JAVA- Null Pointer Exception - wie abfangen
 
Moin Florian,

das klingt, als ob Du auf ein Objekt zugreifen willst, daß noch nicht erzeugt wurde. Wenn Java die Exception meldet, dann wird doch die gesamte Aufruf-Historie ausgegeben (mit Zeilennummer). So kannst Du feststellen, wo in Deinem Programm der fehler auftritt. Und eine Nullpointer-Exception sollte man IMHO nicht abfangen sondern vermeiden.

flomei 6. Mär 2005 11:16

Re: -JAVA- Null Pointer Exception - wie abfangen
 
Null Pointer Exception findet in Zeile 106 statt, das ist dort wo die "Steine" erzeugt werden.
Vielleicht sollte ich lieber ne Klasse Block erzeugen die sich in der Klasse Stein befindet...
Mal sehen, der Tag ist noch lang... ;)

MfG Florian :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz