Ich habe eine Aufgabe für die Universität, wo ich ein Hangman-Spiel mit Threads in Java implementieren muss. Mein Problem ist, dass ich nicht verstehe, wie man mit den Threads umgehen soll. In meinem Code gibt es einen GameLeader, der den GuessingPlayer dazu auffordert, einen Char einzugeben, den er im startWord rät. Nachdem er das getan hat (run() - Methode) nimmt er die Nachricht weiter. Die Verbindung zwischen den zwei Spielern sollte mit 'Nachrichten' (eigene implementierte Klasse) arrangiert werden. Es funktioniert, wenn ich run() anstelle von wait() verwende. Kannst du mir helfen zu verstehen, warum die While-Schleife nach der ersten eingegebenen Nachricht nicht funktioniert?Java-Threads verstehen
Danke!
Klasse GameLeader:
public class GameLeader {
public static void main(String[] args) throws IOException {
GuessingPlayer guessingPlayer = new GuessingPlayer(userInterface);
String guess;
System.out.println("Please enter a startWord to begin!");
String startWord = userInterface.enterWord();
guessingPlayer.start();
while (attempts < 11) {
synchronized (guessingPlayer) {
System.out.println("It's your turn, Guessing Player!");
guessingPlayer.wait();
guess = guessingPlayer.message.toString();
if (startWord.contains(guess)) {
...
}
} else {
...
}
userInterface.mainMenu(guess);
}
}
}
}
Klasse GuessingPlayer:
public class GuessingPlayer extends Thread {
Message guessMessage;
private UserInterface userInterface;
GuessingPlayer(UserInterface userInterface) {
this.userInterface = userInterface;
}
@Override
public void run() {
synchronized (this) {
guessMessage = new Message(userInterface.enterWord());
notify();
}
}
}
_ "... hilf mir zu verstehen, warum die while-Schleife nicht funktioniert ..." _ Wir können dir nicht helfen, wenn du uns nicht sagst, was du erwartest und warum die aktuelle Ausgabe ** falsch ist ** für dich. – progyammer
https://www.tutorialspoint.com/java/java_multithreading.htm Dies war sehr hilfreich, um mich zu verstehen, wie Threads in Java arbeiten, und enthält ein sehr einfaches Arbeitsbeispiel. – mstorkson
Zunächst einmal empfehle ich ein grundlegendes Tutorial zu Threads, z. [Parallelität] (http://docs.oracle.com/javase/tutorial/essential/concurrency/). Zweitens glaube ich nicht, dass dies ein Problem ist, das Threads benötigt, sie werden die Dinge nur noch komplizierter machen. Schließlich demonstrieren Sie einige schlechte Praktiken, zum Beispiel [Synchronisieren statt auf einem separaten Sperrobjekt] (http: // stackoverflow.com/q/442564/5517612) und [extending 'Thread' anstelle der Implementierung von' Runnable'] (http://stackoverflow.com/a/541506/5517612). –