Java While-Schleife hört nicht auf?

3 Antworten

ohne mir das jetzt genauer anzuschauen, ein paar Anmerkungen, ein solches Konstrukt wie du da geschrieben hast, ist .... nicht schön ;)

ich hab dir mal kurz zwei methoden geschrieben mit denen du das ganze schonmal um einiges schöner und kürzer machen kannst, vermeide solche if-else Bedingungen mit so vielen "else if's"

versuche auch deinen Code in Methoden aufzuteilen, als grobe Richtlinie pro Methode nicht mehr als 20, vielleicht 30 Zeilen (manchmal ist es besser wenn eine Methode mehr Zeilen hat aber mehr wie 100 ist meistens nicht wirklich sinnvoll)

 	private void checkQuestionAndSetColor(JTextField answerField,String correctAnswer) {
		boolean wasAnsweredCorrectly = checkIfQuestionWasAnsweredCorrect(answerField, correctAnswer);
		
		if(wasAnsweredCorrectly) {
			answerField.setBackground(Color.GREEN);
		}else {
			answerField.setBackground(Color.RED);
		}
	}
	
	private boolean checkIfQuestionWasAnsweredCorrect(JTextField answerField,String correctAnswer) {
		return answerField.getText().trim().equals(correctAnswer);
	}

Wenn das alles in einem Thread läuft, dann ist das klar, dass es einfriert.
Bei while true wird der aktuelle Thread eben solange blockiert, bis die Schleife beendet ist, also nie. Währendessen kann eben das GUI nicht aktualisiert werden und auch kein Input mehr entgegengenommen werden.

Woher ich das weiß:eigene Erfahrung – Ich habe selber lange im PC gearbeitet

Caspersgirl890 
Fragesteller
 06.07.2018, 10:51

Und wie beende ich die Schleife? Ich dachte, mit dem was in der Klammer nach dem While steht einfach auf false setzen...

0
ZaoDaDong  06.07.2018, 10:54
@Caspersgirl890

Du solltest generell Abstand von einer derartigen Konstruktion nehmen. Damit lastest du den Prozess zu 100% aus, so schnell er kann die Schleife zu wiederholen.
Wenn du schon sowas baust, dann muss diese Methode in einem eigenen Thread laufen. Dazu kann man die Java Klasse Thread benutzen, oder eine eigene basteln, die Thread erweitert. zusätzlich sollte man vermeiden, dass die Schleife zu schnell hintereinander ausgeführt wird. Das könnte man z.b. mit Thread.sleep(xxxx ms) einschränken.

2
ZaoDaDong  06.07.2018, 10:57
@Caspersgirl890

Noch besser wäre es, die Abfrage auf "richtig" oder "falsch" über ein Event zu triggern, statt permanent zu prüfen. Z.b. nach jedem erfolgten Zeicheninput.

2

Vvermutlich wird immer das ELSE ausgeführt und "nochmal" bleibt immer True.

Lösung: Debugger Auspacken und nachsehen was da schief geht ;)


ZaoDaDong  06.07.2018, 10:48

und das ganze wahrscheinlich 1000x pro sekunde.

0
PWolff  06.07.2018, 15:14
@ZaoDaDong

Das war damals, als Java noch interpretiert wurde. Compiliertes Java ist wesentlich schneller.

0