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

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:
Code:
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:
Code:
public void init() {
        menu = new Menu();
        bg = new Background();
        options = new Options();
        pause = new Pause();
        client.sendData("ping".getBytes());
    }
hab ich hier aufgerufen:
Code:
public void run() {
        init();
       
        while(running) {
            ...
        }
    }
Die sendData Methode sieht so aus:
Code:
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
 
@VfL_Freak ja genau bei
Java:
client.sendData("ping".getBytes());
@fhoffmann hier:
Java:
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 ...
 
Zuletzt bearbeitet:
Java:
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.
 
@fhoffmann ok ich habe das jetzt so gemacht
Java:
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 ...
 
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 😉
 
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.
 
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?
 
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 😕
 
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)
 
Momentan startest du ja den Client schon vor der Abfrage.
Lass den Dialog doch vor dem Start anzeigen und starte danach client + eventuell Server.
 
Du meinst so?
Java:
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();
    }
 

Zurück
Oben