Listener oder Signal, dass Connection in übergebenen Handler fertig (MessageHandler)

Admiral Helmut

Aktives Mitglied
Hallo liebe Leut,

entschuldigt bitte, falls der Titel schlecht ist oder ich im falschen Unterforum gelandet bin, war mir nicht so sicher.
Aber es geht eigentlich vor allem um das Grundlegende Design, nicht um das Drumherum.

Genaugenommen arbeite ich daran, an einem Spring WebSocket Endpoint, der auf einem Server läuft, einen dazupassenden Java Client zu registrieren.

Technisch habe ich die Verbindung auch hinbekommen und kann kommunizieren. Zu meinem Problem:

Ich übergeb beim Connecten einen MessageHandler, der dann die Nachrichten und die Session zum Kommunizieren bekommt. Nun will ich nicht von diesem Handler anhängig sein und speichere mir die Session in eine Variable außerhalb des Handlers sobald dieser Connected ist. Damit ich die Initiative ergreifen kann und Nachrichten senden kann.

Ich habe das mal sinnbildmäßig für euch abstrahiert:

Java:
public class Test {

	SpringWebSocketSession session = null;
	SpringWebSocketClient client = null;
	
	public static void main(String[] args){

		Test test = new Test();
		test.client = new SpringWebSocketClient("localhost", "8080");
		test.client.connect(new MessageHandler(){
			
			public void afterConnected(SpringWebSocketSession s){
				
				this.session = s;
			}
			
			public void handleMessage(SpringWebSocketSession s, Message m){
				System.out.println(m); 
				
			}
			public void afterDisconnected(){
				
			}
		});
		
		test.session.send("Hallo");
		
	}
	
}

Das Problem ist folgendes: Wenn ich das laufen lasse, bekomme ich unten bei test.session.send("Hallo"); eine Nullpointer Exception, weil die Verbindung wohl noch nicht fertig ist, wenn ich die Methode aufrufe. Zumindest denke ich das, weil es funktioniert wenn ich ein sleep vor die Methode setze oder mit dem Debugger einfach kurz vor der Methode warte.

Da für unser Programm aber die Zeit sehr wichtig ist, kommt ein sleep nicht in Frage. Außerdem kann ich mir vorstellen, dass man das ganz anders lösen sollte und dass es eine professionellere Lösung gibt.

Würde mich freuen falls mir jemand einen Tipp geben kann.

Vielen Danke
Helmut
 
Zuletzt bearbeitet:

Admiral Helmut

Aktives Mitglied
Ich habe es jetzt mal so gemacht, dass ich nach der Connect Methode in eine While schleife gehe:

Java:
while(session==null)
   {
         Thread.sleep(10);
   }

bis die Session nicht mehr Null ist.

Würde mich aber trotzdem freuen, wenn jemand weiss wie man das macht. Oder ob das sogar gar nicht schlecht ist.

Gruß Helmut
 

Ähnliche Java Themen

Neue Themen


Oben