Hallo, ich bin gerade dabei, ein kleines Client-Server Programm zu schreiben, bei dem in einer GUI in einer JTextArea die Ausgaben des Servers stehen sollen.
Dabei bekomme ich aber immer eine NullPointerException als Fehlermeldung.
Hier der Quellcode und die Fehlermeldung:
Exception in thread "Thread-16" java.lang.NullPointerException
at BestellenGui.processMessage(BestellenGui.java:53)
at Client$Clientempfaenger.run(Client.java:62)
Ist jetzt ein sehr kleiner Codeausschnitt, aber vielleicht liegt es daran, dass du ein split auf einen eventuell null-String machst.
Pack den split doch mal in die if-Abfrage und prüfe ob die Nullpointer immernoch fliegt.
Dann wird deine JTextArea nicht initialisiert sein.
Kann es sein das du eine Instanzvariable ausgeben deklarierst, deine Initialisierung welche du im Anfangspost gezeigt hast aber im Konstruktor oder einer Methode steht? Dann liegt dort nämlich der Fehler: du initialisierst eine lokale Variable ausgeben, die Instanzvariable bleibt uninitialisiert.
Wenn ich aber im Konstruktor hingehe und ausgeben.setText("Hallo Welt"); mache, dann funktioniert das, nur in der methode processMessage nicht.
Im Anhang ist das Projekt, für die die mal einen Blick drauf werfen wollen.
Das steht in der Klasse BestellenGui.
Zum starten des Server die Klasse "ServerGui" ausführen und der Client ist die Klasse "ShopGui".
Dann wird deine JTextArea nicht initialisiert sein.
Kann es sein das du eine Instanzvariable ausgeben deklarierst, deine Initialisierung welche du im Anfangspost gezeigt hast aber im Konstruktor oder einer Methode steht? Dann liegt dort nämlich der Fehler: du initialisierst eine lokale Variable ausgeben, die Instanzvariable bleibt uninitialisiert.
Wir haben das Projekt "Tshirt-Server2 im Informatik-Unterricht bearbeitet und da ich alles fertig hatte sollte ich eine GUI dazu erstellen.
Dann bin ich auf dieses Problem gestoßen und habe meinen Info-Lehrer gefragt, der hat aber auch keine Idee, woran das liegen könnte...
Hab mir deinen Code nochmals angeschaut und den Fehler gefunden.
Die Initialisierung deiner JTextArea passt zwar theoretisch, aber leider wird die Methode processMessage aufgerufen noch bevor die Initialisierung abgeschlossen wurde.
Ursache: Es wird zwar der Konstruktor der Klasse BestellenGui als erstes aufgerufen, aber vor den Initialisierungen noch die Konstruktoren der Superklassen aufgerufen und abgearbeitet.
Und in der Basisklasse Client erstellst du einen ClientEmpfänger welcher sofort gestartet wird und processMessage aufruft.
Lösung: Schreibe für die JTextArea ein get-Methode, sofern die Variable noch nicht initialisiert wurde erstellst du ein neues Objekt ansonsten gibst du das vorhandene zurück
EDIT: Das ist auch einer der Gründe warum in einem Konstruktor wirklich nur Initialisierungen stehen sollten und wirklich verarbeitende Sachen erst durch eine weitere Methode aufgerufen werden sollten.
OK, ich werde das mal versuchen, wenn ich dann immer noch Probleme habe melde ich mich noxh mal, aber ich gehe stark davon aus, dass das das Problem ist.
Vielen dank für eure Mithilfe an alle, die mir geholfen haben.
Danke