Bitte um ein paar Tipps! (Threads, Warten auf Ereignisse,.)

Status
Nicht offen für weitere Antworten.

Pete23

Mitglied
Hallo!

folgende Situation (bei mir ists nicht genau dieselbe, aber von der Art her schon):
angenommen ihr wolltet TicTacToe programmieren. Dargestellt wird das ganze über UI/Swing. Geleitet wird das Spiel von einer Spielleiterklasse, die den einzelnen Spieler-Objekten sagt, wann sie ihren Zug machen sollen, Siege zählt, die GUI-Methoden zur Darstellung des Spielgeschehens aufruft, etc.
Die Spieler sollen entweder menschlich sein (Eingabe über GUI) oder vom Computer gesteuert (die KI berechnet den Zug). Dazu habe ich eine abstrakte Player-Klasse geschaffen, die angibt, welche Methoden ein Player haben muss und zusätzlich die für beide Player-Arten gemeinsamen Methoden zur verfügung stellt (zB getName();). Von dieser Klasse abgeleitet gibts dann HumanPlayer und AIPlayer.
bei player.itsYourTurn() berechnet im einen Fall die KI den Zug, beim anderen klickt der menschliche Spiele mit der Maus auf ein leeres Feld, um sein Kreuzchen zu machen.

jetzt mein Problem:
zunächst hatte ich bei itsYourTurn() einfach den Rückgabe-Wert abfragt. wenn die KI aber länger berechnet, dann blockiert in der Zeit das System (also zB. kann ich keine Buttons klicken) - das liegt wohl daran, dass das alles noch im selben Thread ist...
Noch viel schlimmer ists bei HumanPlayer: der erwartet ja eine Eingabe vom Spieler, das System blockiert aber total (wohl weils in der Schleife gefangen, die abfragt, ob schon eine Eingabe gemacht wurde)...

das ist so nicht recht schön, also hab ich mir gedacht, es gibt einfach keinen rückgabewert. itsYourTurn sagt dem Spieler-Objekt nur, dass es dran ist. ich habe ein eigenes Event-System gemacht (also eigenes Event-Object, EventListener Interface). Player castet einen Event, wenn eine Entscheidung getroffen wurde.
leider habe ich beim programmieren entdeckt, dass das ganze EventSystem auch nicht mehr ist, als dass die Player-Objekte ihre Spielleiter-Klasse kennen und eine Methode (in dem Fall processEvent(event) aufrufen)).
das stört mich deshalb, weil ich dann ja wieder die Methode aufrufe, aus der ich schon gekommen bin:
play() ruft player.itsYourTurn() auf, was wiederum direkt (oder eben über umwege mit events) play() aufruft...
(eben eine klassische situation für returnwerte...)
das "neue" play() ruft das nächste itsYourTurn() auf, das dann wieder play() etc... ich glaube das sollte man nicht machen, denke da kann es auch zu nem StackOverFlow kommen...

trotzdem: wenn ich itsYourTurn() nun aber in die run() methode von Player schreibe, und Player als zweiten Thread starte, funktioniert auch die Eingabe über GUI (wohl weil der andere Thread nicht mehr blockiert ist).

ich habe jetzt aber ganz seltsame errors. ohne zeilenangabe... und ich kann sie mit debug-meldungen nicht lokalisieren, wei sie immer woanders zu sein scheinen. ich schätze mal das liegt an der nicht vorhandenen synchronisation...

wenn ich itsYourTurn() nicht wieder play() aufrufen lassen, dann müsste play von außen gestartet werden. ich denke da jetzt an einen TimerThread, der sagen wir alle 500ms prüft, ob der spieler schon seine wahl getroffen hat und dann eben play aufruft. ich würde mir auch ansehen, ob ich etwas mit synchronized machen kann...

davor würde ich aber gerne wissen, ob man sowas nicht komplett anders macht bzw wie es ihr machen würdet! (also ob ich am richtigen weg bin oder da totale design-feher drinstecken)

---------------------

und ich habe noch ein verständnisproblem zu threads bzw der ausführung von java-programmen:
1 Thread arbeitet einfach den code ab, right? ist daher immer genau in einer Zeile einer Methode einer Klasse.
wenn ich also itsYourTurn() aufrufe, dann springt java in die itsYourTurn() methode und geht - egal ob auf einen return-wert gewartet werden muss oder nicht - zuerst nur diese neue Methode durch und in der ursprünglichen klasse gehts erst weiter, wenn diese methode fertig abgearbeitet wurde. right?

wenn ich jetzt 2 threads habe, laufen die parallel ab. aber das geht dann auch innerhalb von 1er klasse oder? sprich es könne beide threads methoden einer klasse abarbeiten oder gar dieselbe, right?
das wäre bei mir wohl der fall. für sowas brauch ich dann synchronisation oder?

naja, ich denke ich kann mein kleines Problem lösen, aber ich würde eben gerne wissen, wie man es richtig macht. danke auf jeden fall fürs lesen :)
 
B

Beni

Gast
Ich würde bereits den Spielleiter als eigenen Thread betrachten. Dann kann der solange von einem Player blockiert sein, wie er will, es stört niemanden.

Gibt es Veränderungen anzumelden, ruft der Spielleiter die entsprechenden Methoden der GUI auf (könnte man noch hinter einem schönen Event-System verstecken :wink: ).
 

Pete23

Mitglied
es werden vom menschen mehrere eingaben erwartet werden (im laufe des spiels, an verschiedenen) stellen. bis jetzt ist nur eine ausprogrammiert, aber ich habs jetzt eben so gemacht, dass die methode des spielleiters, die diese eingabe von den spieler-objekten verlangt, schon ein eigener thread ist.
wenn ich jetzt weiterdenke, dann wird wohl eh die methode, die eben ein ganzes spiel lenkt, zu nem eigenen thread (also wohl eh so/ähnlich, wie du es vorschlagst)

zuerst ging das bei mir nicht, da ich den thread nicht nochmal starten konnte. Klasse war "extends Thread". jetzt hab ich auf "implements Runnable" umgestellt und kann mit new Thread(..).start() neu starten, ohne dass ich den eigentlichen konstruktor der klasse nochmal neu starte.

aber jetzt habe ich eben so nen seltsamen fehler.. (siehe andere thread in diesme forum); aber funktionieren tuts bis jetzt eigentlich...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Erste Schritte Bitte ein paar Erklärungen zu meinem Code Java Basics - Anfänger-Themen 6
ineedhelpinjava OOP Bitte wichtig Java Basics - Anfänger-Themen 6
G Bitte meinen Account löschen Java Basics - Anfänger-Themen 1
D Bitte um Hilfe muss es schnellstmöglich erledigen Java Basics - Anfänger-Themen 15
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
M Bitte um Hilfe bei 2DArrays Java Basics - Anfänger-Themen 8
D Abrechnung bitte um hilfe Java Basics - Anfänger-Themen 25
Vivien Bitte um Optimierungsvorschläge / Verbesserungsvorschläge / allgemeines Feedback Java Basics - Anfänger-Themen 8
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
J Java List, Bitte um Hilfe Java Basics - Anfänger-Themen 15
J Java List, bitte um Hilfe Java Basics - Anfänger-Themen 3
pry bitte Hilfe beim Kreditrechner objektorientiert Java Basics - Anfänger-Themen 6
marcooooo einmal noch schnell hilfe bitte:/ Java Basics - Anfänger-Themen 2
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
S Bitte Hilfe zu Fehlermeldung am Handy Java Basics - Anfänger-Themen 2
I Do-While / Kalkulator / Bitte um Hilfe Java Basics - Anfänger-Themen 9
P Bitte Hinweise zu folgendem "Klassenproblem" Java Basics - Anfänger-Themen 3
M Bitte um Hilfe bei Quellcode (Rekursion) Java Basics - Anfänger-Themen 6
A Erste Schritte Bitte helfen sie mir diese Programm zu schreiben Java Basics - Anfänger-Themen 12
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
F (Eclipse) Beim importieren etwas fehlerhaft bitte um Hilfe :) Java Basics - Anfänger-Themen 3
B MVC Struktur mit mehreren Szenen - wer schaut mal bitte drüber? Java Basics - Anfänger-Themen 2
T Bitte um Hilfe Java Basics - Anfänger-Themen 9
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
J Bitte Hilfe Java Basics - Anfänger-Themen 4
W FileReader - Bitte um Erklärung Java Basics - Anfänger-Themen 7
V Memory Logik Problem/Denkblockade, bitte helft Java Basics - Anfänger-Themen 1
T Bitte um Hilfe bei Aufgabe: Long zahl = Long.parseLong(args [0]); Java Basics - Anfänger-Themen 3
J Bitte um Erklärung Java Basics - Anfänger-Themen 4
A GUI- Allgemeines Problem (Bitte helfen) Java Basics - Anfänger-Themen 15
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
F Bitte mal Zusammenhänge der Klassen erklären Java Basics - Anfänger-Themen 8
P <identifier> expected Fehler bitte um Hilfe Java Basics - Anfänger-Themen 5
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
O Rundungsfehler bitte erklären! Java Basics - Anfänger-Themen 4
K NullPointerException wird geworfen, bitte um Hilfe! Java Basics - Anfänger-Themen 7
M Erklärung Code Mergesort Bitte Java Basics - Anfänger-Themen 3
N While Schleife Erklärung Bitte Java Basics - Anfänger-Themen 3
S Variablen Hilfe bitte Java Basics - Anfänger-Themen 6
Z Erste Schritte Bitte helft mir dringend!! Java Basics - Anfänger-Themen 3
T Unit tests fehlerhaft bitte um hiiiiilfe :D Java Basics - Anfänger-Themen 1
J Ich bitte DRINGEND um Hilfe!!! Java Basics - Anfänger-Themen 16
Q Importieren meiner Boundary? Bitte Hilfe Java Basics - Anfänger-Themen 3
T Eine kurze frage vor der prüfung bitte. Java Basics - Anfänger-Themen 5
CyberFish initialisieren, obwohl es gemacht wurde! Bitte um Hilfe Java Basics - Anfänger-Themen 10
H Bitte um Hilfe von Profis. Java Basics - Anfänger-Themen 5
S Klassen Formel zur Berechnung .... Bitte um Hilfe Java Basics - Anfänger-Themen 7
H Methoden Bitte um Erklärung der askString-Methode Java Basics - Anfänger-Themen 15
J Probleme bei kompilieren ... Bitte um Hilfe Java Basics - Anfänger-Themen 27
O Erste Schritte Aller Anfang ist schwer ! Bitte um Unterstützung Java Basics - Anfänger-Themen 6
G Bitte um Erklärung dieser einer Zeile Java Basics - Anfänger-Themen 5
P Bitte um hilfe bei einfachem Rechner Java Basics - Anfänger-Themen 7
B Bitte Hilfe für Funktionalität eines Sudokus Java Basics - Anfänger-Themen 8
G Brauche bitte Hilfe, bei umgekehrter Ausgabe!! Java Basics - Anfänger-Themen 6
G Input/Output FilenameFilter aber bitte keine Unterordner Java Basics - Anfänger-Themen 5
J Vererbung Anfänger Programm bitte um Kritik&Anregungen Java Basics - Anfänger-Themen 21
N Bitte Java Basics - Anfänger-Themen 2
D ???:L Bitte einmal mit drüber nachdenken Java Basics - Anfänger-Themen 5
eLogic DownloadManager - Bitte helft mir Java Basics - Anfänger-Themen 7
R Vererbung Bitte um Erklärung - Instanzvariablen Java Basics - Anfänger-Themen 8
U finde fehler nicht! bitte um hilfe Java Basics - Anfänger-Themen 8
M Problem: code too large - bitte um Hilfe Java Basics - Anfänger-Themen 12
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9
B Java und Javac funktionieren nicht - bitte hilfe Java Basics - Anfänger-Themen 5
P Bitte helft mir Java Basics - Anfänger-Themen 3
3 Bitte um Hilfe bei Lösung einer Aufgabe Java Basics - Anfänger-Themen 16
M Aus CSV-Datei lesen und anzeigen (bitte schnell um Antwort) Java Basics - Anfänger-Themen 6
R Jave Problem... bitte um Hilfe!! Java Basics - Anfänger-Themen 6
S Java problem, bitte um hilfe! Java Basics - Anfänger-Themen 9
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
C Bitte kurzes Feedback - JavaVersionen Java Basics - Anfänger-Themen 6
M Bitte um Verbesserungsvorschläge Java Basics - Anfänger-Themen 14
N verständniss problem bitte um hilfe Java Basics - Anfänger-Themen 3
L Brauche bitte dringend Hilfe für Klausur Java Basics - Anfänger-Themen 8
B Monat und Jahr bitte um Hilfe Java Basics - Anfänger-Themen 8
J Datentypen Generics - Bitte helfen !! Java Basics - Anfänger-Themen 9
T Java Beispiel Bitte helft mir Java Basics - Anfänger-Themen 5
A Dringende Bitte um Erklärungen zum besseren Verständnis Java Basics - Anfänger-Themen 4
D Java Problem bitte um hilfe Java Basics - Anfänger-Themen 4
S Datei-KopierProgramm ? CODE BITTE VERBESSERN Java Basics - Anfänger-Themen 11
D code erklären bitte ! Java Basics - Anfänger-Themen 15
Rudolf Verstehe das Ergebnis nicht - bitte erklären Java Basics - Anfänger-Themen 7
M Kann mir bitte jemand "java.util.ArrayList" erklären? Java Basics - Anfänger-Themen 5
M Bitte um Kontrolle meines Quelltextes Java Basics - Anfänger-Themen 10
J Leichte Java Anfängerfrage. Bitte schnelle Antwort. :) Java Basics - Anfänger-Themen 10
S BITTE UM HILFE: Unterschied Deklaration und Signatur einer Methode Java Basics - Anfänger-Themen 3
S BITTE UM HILFE HASHTABLE/import java.util.Hashtable in Ecplipse Java Basics - Anfänger-Themen 12
T Problem mit Aufgabe..bitte um Hilfe Java Basics - Anfänger-Themen 8
G Bitte um Erklärung Java Basics - Anfänger-Themen 9
K 50 errormeldungen- komme auch nach vielen Nachmittagen nicht weiter. bitte helfen Java Basics - Anfänger-Themen 39
D Ausgabe sauber formatieren *bitte nochmal reinschaun* Java Basics - Anfänger-Themen 7
S Bitte um Hilfe beim unsortierten Binärbaum!! Java Basics - Anfänger-Themen 6
D Ausgabe in Datei ( bitte helfen ) Java Basics - Anfänger-Themen 13
-horn- Bitte: Wie besondere Daten auslesen und umspeichern? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben