Swing & Threads

Hi,

ich bin dabei ein Pokerspiel zu schreiben und verwende dazu das MVC-Designpattern.

ich hab ein Model, welches den Spielablauf regelt, einen Controler, der auf Benutzereingaben reagiert und dem Model mitteilt, was es dann tun soll, und halt die Ausgabe.

Spielt man nur mit menschlichen Spielern, wo jeweils der Controller auf eine Eingabe wartet, funktioniert die Anzeige gut (Konsole bzw Swing).

Spielt man jedoch nur noch mit Computerspielern, arbeitet das Model in einer while Schleife (wo die jeweiligen Spieleraktionen ausgeführt werden), solange bis der ShowDown erreicht wird (gewollt).
Aber die Anzeige funktioniert dann mittels Swing nicht mehr und friert ein, bzw aktualisiert sich erst wenn der Showdown erreicht wurde.

Idee: Der Event dispatching thread hat einfach keine Zeit die GUI neu zu zeichnen.

Also hab ich die Aktionen des Models jeweils durch einen neuen Thread vom Controller starten lassen.

Aber: nun startet das Spiel hin und wieder nach dem Login nicht mehr.

Hat einer eine Idee, wie man das besser machen kann ?

Moien

Aber: nun startet das Spiel hin und wieder nach dem Login
nicht mehr.

Dann hast du mindestens einen Fehler in der Syncronisation. Such dir einen Debugger und schau genauer hin oder Mach entsprechende Diagramme in UML.

Hat einer eine Idee, wie man das besser machen kann ?

Ich benutze einen ThreadPool dem ich per Queue die Aufgaben übergebe. Die Aufgabenerstellung und das Abschicken dauern keine 25ms, d.h. der AWT-Swing Thread wird sofort wieder frei. Um die Updates zu machen benutze ich bei kritischen Sachen (Elemente rausholen, neue dazubauen) wieder den AWT-Swing Thread (SwingUtilits.invokeLater(Runnable doRun)).

Wenn man ein neus Programm schreibt und noch keine eigenen Verwaltungsklassen für sowas hat ist der SwingWorker aus 1.6 Gold wert.

cu