GUI wird durch while blockiert. ?

Status
Nicht offen für weitere Antworten.
N

NOCHnixDRAUF

Gast
Hallo zusammen,

unten seht ihr zwei Methoden, mit denen ich jeweils per JButton-Tastendruck eine Socketverbindung aufbauen
möchte. Socket verbindung kommt zwar zu Stande, aber dann hängt sich die GUI auf (Buttons bleiben gedrückt).
Ich denke die while-Anweisungen aus beiden Methoden blockieren die GUI. Hat einer von euch eine Idee wie man das Problem
lösen könnte ?

Danke euch schonmal im vorraus...
Code:
//#######
//# CLIENT 
//#######

public void netClientStart() {
stop=false;
try {
         echoSocket = new Socket(serverName, port);
	 //Objekte für ausgehende(out) und ankommende(in) Ströme erzeugen
	   out = new PrintWriter(echoSocket.getOutputStream(), true);
	    in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
        	    status=true;	    
} catch (IOException e) {
	status=false;
	System.out.print("Fehler beim Aufbau einer Socketverbindung zum Server:" + e.toString());
}
try{
	while (status==true) {			
       receiveMessageClient(in.readLine());
	echoSocket.close();}
} catch (IOException e) {
	e.printStackTrace();
}}
 

//########
//# SERVER #
//########

public void netServerStart() {
    try {
	 ServerSocket server = new ServerSocket(3141);
	 socket = server.accept();
	 System.out.print("Verbindung aufgebaut");   
	} catch (IOException e) {
	System.out.print("Verbindungsfehler");	
	}
try{
         out = new PrintWriter(socket.getOutputStream(), true);
          BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));		  while (stop==false) {
	  receiveMessageClient(in.readLine());
	}
	} catch (IOException e) {
	}
}
 

0x7F800000

Top Contributor
hab's mir jetzt nicht im Detail angeschaut, aber... Du hast hier ja schonmal mindestens zwei nie endende Prozesse, die parallel ausgeführt werden müssen (gui und kommunikation über diesen socket da), also brauchst du doch auch zwei threads für dise beiden aufgaben. Swing läuft sowieso, jetzt musst du nur noch die kommunikation in einem anderen thread erledigen.
 
N

NOCHnixDRAUF

Gast
stimmt, da war was...

Danke dir Andrey, für den Tip! werde mal schauen ob ich das mit dem Thread hinbekomme, sonst muss ich nochmal posten :D
 

0x7F800000

Top Contributor
Um die Frage aus dem gelöschten Thread zu beantworten: Ja, du kannst deine eigenen Beiträge einige Zeit lang löschen, aber selbstverständlich nur wenn du angemeldet bist (wenn das jeder gast oder spambot könnte, wär's ja auch ein wenig übertrieben^^ :D )
 
N

NOCHnixDRAUF

Gast
Habe den Vorschlag mit seperaten Threads versucht umzusetzen, leider tritt weiterhin das gleiche Problem auf.
Habe diesmal den Server und Client jeweils in einer eigenen Klasse geschrieben (mit extends Thread).
Socket wird aufgebaut und Nachrichten verschicken klappt auch, aber meine GUI hängt. Sobald ich die
While-Schleide aus der Client und Serverklasse rausnehme funktioniert auch die GUI, aber dann wird ja die Leitung nicht abgehorcht. Habe paar Instanzvariablen weggegelassen, damit es nicht soviel wird...

Wenn ich eine Socketverbindung aufgebaut habe. Beide JButtons
bleiben gedrückt und das wars.

weiß nicht mehr weiter :(

Code:
/*MAIN-Klasse*/
public startBS() {
	    super();
	    gui=new GUI(this);		   		     
    }
 
public void netClientStart() {
  client=new NetClient("station",3141,this);
   client.start();
}
 
public void netServerStart(){
  server=new NetServer(this);   		
   server.start();
}

public static void main(String[] args) {
	startBS st=new startBS();
	st.start();
  }
}

Code:
public class NetServer extends Thread {
     super();
public NetServer(startBS startBS) {
     super();
       this.startBS=startBS;
			   
	try {
	   ServerSocket server = new ServerSocket(3141);
	     socket = server.accept();
                         System.out.print("Server: Verbindung zu Client aufgebaut");
	       } catch (IOException e) {
                          System.out.print("Verbindungsfehler");	
	        }
	   try{
                          out = new PrintWriter(socket.getOutputStream(), true);
	          in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	               out.println("Servertestnachricht!");
		  while (stop==false) {  //**HIER LIEGT DAS PROBLEM**
	                      receiveMessage(in.readLine());  
		  }
	    } catch (IOException e) {
	      System.err.println(e.toString());}		  		    
                  }
public void receiveMessage(String a) {
System.out.print("Vom Client:"+a);
 }
}


Code:
public NetClient(String serverName, int port,startBS startBS){
	     super();
   try {
      echoSocket = new Socket(serverName, targetPort);
 	out = new PrintWriter(echoSocket.getOutputStream(), true);
	in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
        	 status=true;       
        	out.println("Clienttestnachricht !");
	      } catch (IOException e) { 
	        status=false;
	   System.out.print("Fehler beim Aufbau einer Socketverbindung zum Server:" + e.toString());
	   }
//Falls Socket aufgebaut auf ankommenden Strom horchen
            try {
	while (status==true) {
	  System.out.print(in.readLine());}
	      } catch (IOException e) {
   	e.printStackTrace();
  }
}
public void receiveMessage (String m){
	System.out.print("Vom Server:"+m);
}
}
[/img]
 

0x7F800000

Top Contributor
echt? wundert mich aber. Imho dürfte es immer noch nicht laufen. Für mich sieht's nämlich so aus, als hättest du die while-schleifen schon in den Konstruktor reingebaut, wo die eigentlich überhaupt nicht hingehören. Das alles kommt natürlich in run() und danach muss der thread per start() gestrartet werden.
 
N

NOCHnixDRAUF

Gast
richtig Andrey, es läuft seit dem ich Runnable implementiert habe und die while-schleife dort reingepackt habe...
Dank dir nochmal !
 

0x7F800000

Top Contributor
Jo, ich hab's mir ja fast schon denken können^^ ;)
Aber:
NOCHnixDRAUF hat gesagt.:
jetzt klappts doch ! Habe den Thread wohl vorher nicht richtig gestartet....
sowas bitte nächstes mal nicht posten. Wenn du eine Lösung gefunden hast, dann schreib bitte kurz hin, wie die ausgesehen hat, damit die Leute später in der Suche nicht nur deine Frage, sondern auch die Antwort auf die Frage finden ;) (gilt jetzt nicht nur hier, sondern allgemein bei solchen foren/boards etc)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
J Warum wird Array durch Methode ohne Rückgabewert verändert? Java Basics - Anfänger-Themen 5
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
J OOP Objekte durch Nutzer erstellen lassen. Wie wird referenziert? Java Basics - Anfänger-Themen 9
E Warum wird Methode nicht durch return-Befehl beendet? Java Basics - Anfänger-Themen 3
A Main warten lassen bis Variable durch Button übergeben wird Java Basics - Anfänger-Themen 2
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
P Webseite vom Smartmeter wird nur unleserlich angezeigt Java Basics - Anfänger-Themen 7
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Oneixee5 Maven Plugin wird 2 mal ausgeführt Java Basics - Anfänger-Themen 10
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
F Session wird mehrfach erzeugt Java Basics - Anfänger-Themen 11
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
kodela Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 3
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
H Wie wird ein String intern gespeichert? Java Basics - Anfänger-Themen 10
A char array wird überschrieben Java Basics - Anfänger-Themen 6
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
S setContentView(R.Layout.XXX) wird Rot angezeigt Java Basics - Anfänger-Themen 0
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6
S for-Schleife wird ignoriert Java Basics - Anfänger-Themen 15
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
M BorderLayout, 2Panels, EAST wird nicht angezeigt ?? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben