# Exception in thread "Thread-3" java.lang.NullPointerException



## mimix (5. Jan 2012)

Hallo

Ich möchte Pacman programmieren. Mein Fenster besteht aus einem JFrame, JPanel mit dem LayoutManager "GridLayout". Da GridLayout-Manager seine Komponente in einem Gitter ordnet das aus gleich grossen gitterzellen besteht ist jede dieser Gitterzelle bei mir ein Panel. So kann im Spiel auf jeder Zelle entweder ein Punkt, eine Wand, ein Geist oder Pacman stehen. Um Pacman auf das Spielfeld zu zeichnen habe ich ein glass pane verwendet. Nun möchte ich aber, dass Pacman auf die unteren Fenster, also auf die einzelnen Kacheln zugreift, um zu überprüfen ob er auf einem Punkt, auf eine Wand oder auf gar nichts steht. 

Ich wollte es so machen:

```
class MyGlassPane extends JComponent implements ItemListener, Runnable {
...
public void run() {
      Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
      if (has.getKachelRechts().hasPunkt() == true) {
         while (true) {
            // Verändern der x- Koordinate
            x_pos++;
            // Neuzeichnen des Applets
            repaint();
            try {
               Thread.sleep(25);
            } catch (InterruptedException ex) {
            }
            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
         }
      }
   }
...
```

aber bekomme leider eine Exception in thread "Thread-3" java.lang.NullPointerException zurück

Kann mir jemand helfen?


----------



## GUI-Programmer (5. Jan 2012)

StackTrace??? Welche Zeile, welche Klasse?


----------



## mimix (5. Jan 2012)

In der MyGlassPane Klasse


Exception in thread "Thread-3" java.lang.NullPointerException
	at tt.test.pacman.spielfeld.SpielfeldKachelModel.getKachelRechts(SpielfeldKachelModel.java:86)
	at tt.test.pacman.MyGlassPane.run(MyGlassPane.java:43)


----------



## GUI-Programmer (5. Jan 2012)

Ich hab mal all deinen Klassen in ein einziges Package gepackt und entsprecht die 1. Zeile deiner Klasse so abgeändert und bei mir startet dein Programm ohne Exception. Ich benutze Eclipse.


----------



## mimix (5. Jan 2012)

Ja das stimmt, aber sobald man die Checkbox aktiviert kommt die Fehlermeldung.


----------



## GUI-Programmer (5. Jan 2012)

Nein, bei mir nicht, es erscheint ein gelber Punkt in der Mitte, der vermutlich mal Pacman darstellen soll.


----------



## mimix (5. Jan 2012)

Auch beim aktivieren der checkbox?weil genau dort erscheint dann die Fehlermeldung.


----------



## GUI-Programmer (5. Jan 2012)

Nein, keine Fehlermeldung, aber soll denn passieren, soll sich der Punkt auch noch bewegen, wenn ja, sag mir in welcher Klasse du die start Methode deiner JComboBox aufrust und sag mir wo ich nen try - catch Block hinpacken soll, bzw. mach du das und gib mir mal den kompletten StackTrace! (mit ex.printStackTrace() und dann kopieren)


----------



## Tomate_Salat (5. Jan 2012)

Poste mal die Methode getKachelRechts von SpielfeldKachelModel mit korrekter Zeilenangabe ([java=80])

z.B.: [noparse][java=25]System.out.println("Ich bin zeile 25");[/code][/noparse]
[java=25]
System.out.println("Ich bin zeile 25");
[/code]


----------



## mimix (5. Jan 2012)

Die run() Methode ist in der MyGlassPane Klasse.


```
public void run() {
      Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
      if (has.getKachelRechts().isLeer() == true) {        
        while (true) {
            x_pos++;
            repaint();
            try {
               Thread.sleep(25);
            } catch (InterruptedException ex) {
            }
            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
         }
      }
   }
```


Hier wird die Position festgelegt

```
SpielfeldKachelModel has = new SpielfeldKachelModel(null, 12, 12); //x=12,y=12
```

[JAVA=62]
public SpielfeldKachelModel getKachelRechts() {
      return parent.getKachelPosition(pos_x + 1, pos_y);
   }
[/code]

Also müsste eig. Pacman laufen, da die Kachel leer ist.


Exception:
Exception in thread "Thread-3" java.lang.NullPointerException
	at tt.test.pacman.spielfeld.SpielfeldKachelModel.getKachelRechts(SpielfeldKachelModel.java:63)
	at tt.test.pacman.MyGlassPane.run(MyGlassPane.java:40)
	at java.lang.Thread.run(Unknown Source)


----------



## truesoul (5. Jan 2012)

Dann wird wohl parent == null sein.
Initialisierst du denn parent irgendwo?


----------



## mimix (5. Jan 2012)

Nein, parent wird nicht initialisiert.


----------



## GUI-Programmer (5. Jan 2012)

Bekomme nun den Fehler auch. Und meine Schlussfolgerung: parent ist auf jeden fall null. Getestet mit ein System.out.println(parent);

Somit ist MyGlassPane.has.getKachelRechts() dann null und kann daher nicht die Methode ausführen. Warum das so ist habe ich bisjetzt aber nicht rausfinden können, ist ja schließlich dein Code und dein Programmiestil. Mein Tipp: Entweder Englisch (bevorzuge ich), oder deutsch, aber nicht mischen.


----------



## hdi (5. Jan 2012)

> Entweder Englisch (bevorzuge ich), oder deutsch, aber nicht mischen.


Getter & Setter sollten immer mit get/set starten, sonst findest man sie nicht. Versuch das mal auf Deutsch zu schreiben. frageRechterEckpunktAb() ? Das ist Quatsch. Insofern sollte man da auch wenn man sonst auf deutsch codet die englischen Präfixe beibehalten. Aber ich geb dir Recht: Das beste ist wenn man gleich alles auf Englisch hält.


----------



## GUI-Programmer (5. Jan 2012)

hdi hat gesagt.:


> Getter & Setter sollten immer mit get/set starten, sonst findest man sie nicht. Versuch das mal auf Deutsch zu schreiben. frageRechterEckpunktAb() ? Das ist Quatsch. Insofern sollte man da auch wenn man sonst auf deutsch codet die englischen Präfixe beibehalten. Aber ich geb dir Recht: Das beste ist wenn man gleich alles auf Englisch hält.



Auf Deutsch habe ich das in der Schule so gelernt: 
	
	
	
	





```
rechterEckpunktGeben()
```
 und 
	
	
	
	





```
rechterEckpunktSetzen(...)
```

Aber darum geht`s hier ja nicht, ich finde halt den Fehler nicht, dafür müsste ich mich ins komplette Programm einlesen mit allen Klassen um es vollständig verstanden zu haben und dann suchen zu können, aber ich glaub das ist nicht der Zweck dieses Forums hier. Vielleicht findet ja jemand den Fehler einfach so beim Überfliegen!


----------



## hdi (5. Jan 2012)

> Auf Deutsch habe ich das in der Schule so gelernt


Was beweist, dass die Lehrer an der Schule keine Ahnung haben. Wie willst du denn mit so einer Namensgebung herausfinden welche Werte des Objekts du abfragen oder ändern kannst? Da musst du ja die komplette API-Doc durchscrollen. Übrigens gibt es gewisse Frameworks die voraussetzen, dass Getter und Setter sich an die übliche Namenskonvention halten (Java Beans), und wenn die Methoden anders heißen kracht es da.


----------



## GUI-Programmer (5. Jan 2012)

hdi hat gesagt.:


> Wie willst du denn mit so einer Namensgebung herausfinden welche Werte des Objekts du abfragen oder ändern kannst? Da musst du ja die komplette API-Doc durchscrollen. Übrigens gibt es gewisse Frameworks die voraussetzen, dass Getter und Setter sich an die übliche Namenskonvention halten (Java Beans), und wenn die Methoden anders heißen kracht es da.



Weshalb ich beim Programmieren ((meist) außer dem Kommentar) immer Englisch verwende.

Aber nun zum Thema:
Ich bin der Meinung, der Fehler liegt ganz wo anders, da ja anscheinend in 
	
	
	
	





```
SpielfeldModel.getKachelPosition(int x, int y)
```
 entweder spielfeld[x][y] null ist, was bedeuten würde das vermutlich ein Fehler in den for-Schleifen liegt. Oder dummyWand null ist, wobei mir das sehr unwahrscheinlich zu sein scheint, da im Konstruktor von SpielfeldModel es mit 
	
	
	
	





```
dummyWand = new SpielfeldKachelModel(null, -1, -1);
```
 ja initialisiert wird und nirgenswo mehr auf null gesetzt werden kann.


----------



## hdi (5. Jan 2012)

@TO Ich würd mal den Eclipse Debugger anschmeißen, damit kommt man in solchen Fällen oft schneller zu einer Lösung.


----------



## Stelufl (5. Jan 2012)

Wie du hast noch nicht debuggt? Wenn ich ne NPE bekomme, ist das Debugging mit sinnvoll gesetzten Haltepunkten das erste was ich mache und das effektivste, um den Ursprung der NPE herauszufinden.


----------

