# Exeption in thread "Thread-2" NullPointerExeption: init methode?



## H4CKSprogrammer (21. Mrz 2018)

Hey ich bin's wieder und komme mit einem neuen problem...

Wollte mein Game multiplayer spielbar machen doch wenn ich jz das game starte kommt dieser fehler:

```
Exception in thread "Thread-2" java.lang.NullPointerException
    at de.markus.rpg.Main.init(Main.java:70)
    at de.markus.rpg.Main.run(Main.java:102)
    at java.lang.Thread.run(Thread.java:748)
```

Die init Methode:

```
public void init() {
        menu = new Menu();
        bg = new Background();
        options = new Options();
        pause = new Pause();
        client.sendData("ping".getBytes());
    }
```
hab ich hier aufgerufen:

```
public void run() {
        init();
       
        while(running) {
            ...
        }
    }
```
Die sendData Methode sieht so aus:

```
public void sendData(byte[] data) {
        DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, 1331);
        try {
            socket.send(packet);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
```

Ich habe keine Idee mehr woran es liegt :[

Markus


----------



## fhoffmann (21. Mrz 2018)

Und wo wird client initialisiert?


----------



## VfL_Freak (21. Mrz 2018)

Moin,

im übrigen tritt der Fehler genau hier auf :


H4CKSprogrammer hat gesagt.:


> at de.markus.rpg.Main.init(Main.java:70)


nur weiß im Grunde keiner genau, was in Zeile 70 steht! 
Aber wie @fhoffmann schon schrieb, vermutlich dies hier 

```
client.sendData("ping".getBytes());
```
oder ?
VG Klaus


----------



## H4CKSprogrammer (21. Mrz 2018)

@VfL_Freak ja genau bei 
	
	
	
	





```
client.sendData("ping".getBytes());
```
@fhoffmann hier:

```
public synchronized void start() {
        running = true;
        new Thread(this).start();
   
        if(JOptionPane.showConfirmDialog(this, "Do you want to run a server?") == 0) {
            server = new GameServer(this);
            server.start();
        }
   
        GameClient client = new GameClient(this, "localhost");
        client.start();
    }
```
Weiß aber trotzdem nicht weiter ...


----------



## fhoffmann (21. Mrz 2018)

```
GameClient client = new GameClient(this, "localhost");
```
Hier legst du eine lokale (!) Variable client an. Diese existiert nur in der Methode start(); sie hat nichts mit dem Member der Klasse zu tun. Dieses Member ist weiterhin NULL.


----------



## H4CKSprogrammer (21. Mrz 2018)

@fhoffmann ok ich habe das jetzt so gemacht

```
public class Main extends Canvas implemnts Runnable{
private GameClient client;
...
public synchronized void start() {
        running = true;
        new Thread(this).start();
 
        if(JOptionPane.showConfirmDialog(this, "Do you want to run a server?") == 0) {
            server = new GameServer(this);
            server.start();
        }
 
        client = new GameClient(this, "localhost");
        client.start();
    }
}
```
funktioniert aber trotzdem nicht ...


----------



## Robat (21. Mrz 2018)

H4CKSprogrammer hat gesagt.:


> funktioniert aber trotzdem nicht ...


Und das heißt?


----------



## H4CKSprogrammer (21. Mrz 2018)

@Robat gleiche Fehlermeldung wie oben genannt


----------



## H4CKSprogrammer (21. Mrz 2018)

vielleicht hilft das ja was:
Main.java
GamClient.java
GameServer.java


----------



## Robat (21. Mrz 2018)

Dein Problem ist ganz einfach das du in deiner Methode `start()` erst deine `init()` Methode aufrufst (in der du `client` verwendest) und *danach* erst `client` initialisierst.

Denk immer daran, dass Code in der Reihenfolge abgearbeitet wird, wie du ihn schreibst


----------



## H4CKSprogrammer (21. Mrz 2018)

wie meinst du das erst kommt ja die method start dann die run, in der dann die init methode aufgerufen wird oder?


----------



## Robat (21. Mrz 2018)

`new Thread().start()` sorgt doch dafür, dass der Code in der run Methode ausgeführt wird. Dort rufst du init auf aber erst am Ende der start Methode initialisiert du client.


----------



## H4CKSprogrammer (21. Mrz 2018)

jap danke funktioniert


----------



## H4CKSprogrammer (21. Mrz 2018)

brauch doch nochmal hilfe und zwar will ich das man auswählen kann ob man einen Server starten will oder nicht aber imm hintergrund laufen die sachen weiter also warten nicht auf meine antwort in dem confirmdialog kann ich das irgendwie machen?


----------



## Robat (21. Mrz 2018)

Kannst du das weiter präzisieren? Versteh deine Absicht nicht wirklich


----------



## H4CKSprogrammer (21. Mrz 2018)

Also ich mache eine showConfirmDialog option wo ich frage ob man einen Server machen will oder nicht da aber im hintergrund das programm weiter läuft wird, auch wenn man einen server machen will also auf ja klickt, schon davor eine nachricht gesendet, bei mir ping worauf der server mit pong reagieren soll. Aber da das ping so schnell abgeschickt wird kommt, auch wenn man einen server machen will, kein pong also muss man das programm pausieren bis der spieler entschieden hat ob man einen Server starten will oder nicht ... ist bisschen schwer zu beschreiben


----------



## Robat (21. Mrz 2018)

Dein Dialog also also blockieren, bis der Nutzer ja oder nein gedrückt hat?


----------



## H4CKSprogrammer (21. Mrz 2018)

Genau


----------



## Robat (22. Mrz 2018)

Dann zeig bitte noch mal deinen Code dazu (der Link ist abgelaufen).
Prinzipiell sind die Dinger nämlich von Haus aus blockierend. (wenn ich mich nicht irre)


----------



## H4CKSprogrammer (22. Mrz 2018)

hier ist die Main.java
wenn du noch andere klassen brauchst einfach schreiben


----------



## Robat (22. Mrz 2018)

Momentan startest du ja den Client schon vor der Abfrage.
Lass den Dialog doch vor dem Start anzeigen und starte *danach* client + eventuell Server.


----------



## H4CKSprogrammer (22. Mrz 2018)

Du meinst so?

```
public synchronized void start() {
        running = true;
        new Thread(this).start();
      
      
      
      
        if(JOptionPane.showConfirmDialog(this, "Do you want to run a server?") == 0) {
            server = new GameServer(this);
            server.start();
        }
      
        client = new GameClient(this, "localhost");
        client.start();
    }
```


----------



## H4CKSprogrammer (22. Mrz 2018)

Dann kommt der fehler von vorhin


----------



## H4CKSprogrammer (22. Mrz 2018)

Hab jetzt erst den dialog gemacht und danach das mit dem running und dem new Thread...


----------



## VfL_Freak (22. Mrz 2018)

H4CKSprogrammer hat gesagt.:


> Hab jetzt erst den dialog gemacht und danach das mit dem running und dem new Thread...


fein fein ... 
Und ??? 

VG Klaus


----------



## H4CKSprogrammer (22. Mrz 2018)

Es funktioniert


----------

