Hi,
Ich bastel mir grad nen kleinen Daemon, der den Netzwerktraffic unter Linux loggt und auch aktuelle Transferraten übers Netzwerk bereitstellt.
Ich bin grade dabei einfach mal ein universalprogramm zu schreiben, wo ich mit mit einem Server verbinden kann und einfach nur Strings senden und empfangen kann.
Allerdings gibts da ein Problem:
Ich führe die Methode readLine() des BufferedReaders vom Socket in einem Thread aus. Diese Methode wartet so lange, bis irgendwas ankommt. Das Programm würde ohne Thread einfach stehen bleiben, bis was ankommt. Deswegen der Thread.
Zuerst hab ich immer SWTExceptions bekommen, da SWT den Zugriff auf Widgets ausserhalb des GUI Threads nicht erlaubt. Das hab ich mitlerweile mit der asyncExec(Runnable) Methode erledigt.
Allerdings wird der Thread gestartet und das Prog hängt dann. Es bleibt genau beim readLine() hängen. Wobei die GUI aber im anderen Thread weiterlaufen sollte. Also hab ich jetzt dasselbe, was ich auch ohne Threads hätte
Sieht so aus, als ob SWT immer auf das Ende des Threads wartet, bevor andere Operationen ausgeführt werden.
Gibt es da eine Lösung?
In AWT/Swing hab ich das ganze auch schonmal so gelöst. Nur SWT ist anscheinend ein wenig genauer und extravaganter
Code:display.asyncExec(new Runnable() { public void run() { try { while(true) { String s = reader.readLine(); System.out.println("receiving: " + s); txt_receive.append(s + System.getProperty("line.separator")); } } catch(Exception e) { outputException(e); } } });
Lesezeichen