Socket [Chatprogramm] Nachrichten vom Server anzeigen lassen

Zel2491

Aktives Mitglied
Hoi ;)

In meinem Chatprogramm lauscht meine Klasse ListenToServer ständig auf Nachrichten, die ich vom Server bekomme:

Java:
package network;

import gui.UserInterfaceClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class ListenToServer extends Thread {

	private BufferedReader inFromServer = null;
	private String msgFromServer = null;
	private Socket clientSocket = null;
	private UserInterfaceClient uic = new UserInterfaceClient(null, null);

	public ListenToServer(Socket clientSocket) {
		this.clientSocket = clientSocket;
		this.start();

	}

	public void run() {

		try {

			inFromServer = new BufferedReader(new InputStreamReader(
					clientSocket.getInputStream()));

			while (true) {
				msgFromServer = inFromServer.readLine();
				uic.setMessage(msgFromServer);
				System.out.println("FROM SERVER: " + msgFromServer);

			}

		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

[c]uic.setMessage(msgFromServer);[/c] bezieht sich auf meinen Setter
Java:
public void setMessage(String message) {
		this.message = message;
	}

Also sobald eine Nachricht vom Server kommt, sollte er meinen String message mit der neuen Nachricht überschreiben und dann:

Java:
public void run() {
		while (true) {
			if (message != null) {
				out.append(message);
				message = null;
			}
		}
	}

sollte er in meinem GUI mein JTextArea out mit der neuen Nachricht anzeigen.

Das macht er aber nicht... Ich kriege eine Nachricht vom Server, hab mir die mal einfach per System.out.println in der Konsole anzeigen lassen, allerdings wird sie nicht im TextArea angezeigt...

Weiß da jemand weiter?

So long,

Zel
 

nrg

Top Contributor
zwar lässt es die run-Methode vemuten aber ich frag trotzdem: läuft das in einem eigenen Thread? wird dieser auch richtig mit start() gestartet? könnte mir vorstellen, dass durch die Dauerschleife dein EDT einfriert
 

Michael...

Top Contributor
[c]uic.setMessage(msgFromServer);[/c] bezieht sich auf meinen Setter
Java:
public void setMessage(String message) {
		this.message = message;
	}

Also sobald eine Nachricht vom Server kommt, sollte er meinen String message mit der neuen Nachricht überschreiben und dann:

Java:
public void run() {
		while (true) {
			if (message != null) {
				out.append(message);
				message = null;
			}
		}
	}

sollte er in meinem GUI mein JTextArea out mit der neuen Nachricht anzeigen.

Das Vorgehen ist merkwürdig. Warum fügst Du die Nachricht nicht direkt in die TextArea ein anstatt mit einem !!Dauer!!Thread auf das befüllen einer Variable zu warten.

Warum der Code nicht funktioniert ist schwer zu sagen. Mögliche Fehlerquellen:
- der "merkwürdige" Thread läuft garnicht
- Die Variable
Code:
uic
im Listenerthread referenziert "falsche" nicht GUI relevante uic Objekt
...
 

Zel2491

Aktives Mitglied
Ach, ich seh gerad, hab was wichtiges vergessen zu erwähnen...:

ich schreibe es nicht direkt in das TextArea, weil dieses sich in einer anderen Klasse befindet, nämlich in der Klasse, die zu meiner Instanz uic gehört. Daher dachte ich mir, dass das Verfahren mit dem setter und dem Überschreiben die einfachste Variante sei.



Den Thread starte ich am Ende meines Konstruktors:

Java:
new Thread(this).start();


Zu den möglichen Fehlerquellen:

das mit den falschen Referenzen des uic-Objektes könnte es glaube ich eher sein, als dass der Thread nicht funktioniert.

Wenn es denn am uic-Objekt liegt: wüsste jemand eine Möglichkeit, dieses zu umgehen?
Fakt bleibt halt, dass der "gehorchte" Text in das TextArea muss, welches sich nunmal in einer anderen Klasse befindet...^^
 

Xeonkryptos

Bekanntes Mitglied
Ich denke Mal, dass es mit dem Thread ein Problem gibt und zwar dem lokalen Speicher und deiner Instanzvariable. Ich würde dir lieber zu einem eigenen Listener empfehlen, der, sofern eine neue Nachricht, ein Event feuert und dann darauf reagiert. Damit bleibt das Problem mit dem lokalen internen Speicher der Threads aus.
 

Xeonkryptos

Bekanntes Mitglied
Wenn ich mir das nochmal überdenke, wäre sogar ein Listener schon zu viel! Ich würde dir zu empfehlen, dass du in deiner set-Methode einfach eine Überprüfung einbaust, um null-Werte, etc. rauszufiltern und dann einfach die Message in die TextArea einsetzt ohne Umweg über einen Thread, Listener, Instanzvariable etc.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Probleme mit awt.List in Chatprogramm Allgemeine Java-Themen 14
P Chatprogramm über udp Allgemeine Java-Themen 3
J Chatprogramm Allgemeine Java-Themen 13
A ChatProgramm für Konsole Allgemeine Java-Themen 3
S Nachrichten Filter Programm Allgemeine Java-Themen 14
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
R Nachrichten an laufendes Programm senden Allgemeine Java-Themen 4
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
E Server Client Audio Allgemeine Java-Themen 6
E Server Client Audio Allgemeine Java-Themen 0
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
D Live-Scripting im Server Allgemeine Java-Themen 6
Monokuma Threadproblem mit Sockets und Server Allgemeine Java-Themen 7
T imagej-server NullPointerException Allgemeine Java-Themen 1
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
C Java RMI Client - Server Allgemeine Java-Themen 0
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
M TomEE auf Windows Server 2016 installieren Allgemeine Java-Themen 4
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
J Java - hoher Ramverbraucht auf WTS Server Allgemeine Java-Themen 8
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
S Simples Client Server Setup in Java Allgemeine Java-Themen 4
K Server mieten, Berechnungen darauf ausführen Allgemeine Java-Themen 14
Anfänger2011 Java Server oder lieber was anderes Allgemeine Java-Themen 16
F Best Practice Server und Clients Allgemeine Java-Themen 10
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
D Best Practice Java Application Server , Docker oder was? Allgemeine Java-Themen 15
L Suche nach CalDav Server API Allgemeine Java-Themen 0
C Hang Man Server Client Allgemeine Java-Themen 3
C Hang man mit Server/Client Allgemeine Java-Themen 2
K Classpath JDBC Driver auf Server Allgemeine Java-Themen 4
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
I Installer, der JAVA EE Server und DB installiert Allgemeine Java-Themen 10
M Kapselung JasperReports Server und Java Allgemeine Java-Themen 5
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
C Mit Pc Awendungen auf Server starten Allgemeine Java-Themen 8
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
T Java Streaming-Server & Streaming-Client Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
D Client / Server Allgemeine Java-Themen 23
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
U AWT simulierter Tastendruck auf Virtual Server Allgemeine Java-Themen 7
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
N COM Server ansteuern / KISSsoft Allgemeine Java-Themen 3
N URLConnection - Server abgeschaltet Allgemeine Java-Themen 2
A Parser verursacht Speicherprobleme auf Server Allgemeine Java-Themen 2
T Mit Java auf Dateien zugreifen die auf einem Server liegen Allgemeine Java-Themen 5
J Problem beim Auslesen einer Datei vom Server Allgemeine Java-Themen 4
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J Application Server Allgemeine Java-Themen 2
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
C game-server GUI erstellen Allgemeine Java-Themen 13
Developer_X Java FTP - Ordner auf Server erstellen Allgemeine Java-Themen 7
C Java Server Pages Problem Allgemeine Java-Themen 6
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
M Server-Responds testen, Code-Redundanz Allgemeine Java-Themen 3
T JPA Entity im Client-Server-Umfeld Allgemeine Java-Themen 19
C Primzahlen Server Allgemeine Java-Themen 3
K Server Daten Visualisieren Allgemeine Java-Themen 3
S FTP Gezippte Datei von FTP Server downloaden Allgemeine Java-Themen 24
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
B verbindung mit exchange server Allgemeine Java-Themen 3
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
D Versuch Server - Client anwendung Allgemeine Java-Themen 9
M Frage zum Auslesen einer Datei auf nem Server Allgemeine Java-Themen 4
ruutaiokwu MS Exchange Server 2003 Daten auslesen Allgemeine Java-Themen 2
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
Final_Striker Datei vom Server bekommen Allgemeine Java-Themen 2
H Server Threaded machen. Port-Problem Frage Allgemeine Java-Themen 2
W programm auf server Allgemeine Java-Themen 5
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
MQue Server- Thread Client Allgemeine Java-Themen 2
N Daten auf Server kopieren Allgemeine Java-Themen 6
S Datei auf Server mit lokaler Datei vergleichen Allgemeine Java-Themen 4
J J2EE Server für EJB Container Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
I Persistenz ohne App-Server? Allgemeine Java-Themen 6
O binärer Suchbaum mit client server., objekte speichern. Allgemeine Java-Themen 2
0 kein Java unter Server 2008 ? Allgemeine Java-Themen 3
G Proxy- Server setzen Allgemeine Java-Themen 2
G Preise am Server verändern Allgemeine Java-Themen 4
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
J Java zugriff auf Exchange Server Allgemeine Java-Themen 10
MQue FTP Server/ Datei ablegen Allgemeine Java-Themen 4
F Java Server VM/ Client VM Allgemeine Java-Themen 7
J java + rmi + not found in gnu.java.rmi.server Allgemeine Java-Themen 7
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
A Client/Server-Anwendung Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben