Permanent laufender loop mit Eingabefunktion gesucht

CT9288

Mitglied
Hallo ihr Lieben, ich mal wieder o_o
Ich habe jetzt eine Weile nicht mehr mit Java gewerkelt aber wollte demnächst mal wieder weiter machen. Das Problem ist, ich möchte gerne an einer Stelle weiter machen, die mir damals Probleme bereitet hatte, und um derentwillen ich jetzt mal wieder Rat ersuche.
Eins vorweg, ich bin nach wie vor blutiger Anfänger.
Ich weiß wie ich bei Netbeans JFrames erstelle, ich weiß, wie ich Textfelder, Buttons, etc. erstelle und auch wie ich deren Inhalt manipulieren kann. Soweit so gut.
Ich interessiere mich für Zahlensimulationen, und versuche immer mal wieder eine zu erstellen, stolpere aber immer über den gleichen Fehler:
Angenommen ich habe ein JFrame mit Hasen, Füchsen, Pflanzen. Alle drei sind von einander abhängig. Mit jedem Tick im Loop soll sich die Zahl aller dreien in Relation zueinander verändern. Pflanzen wachsen, Hasen vermehren sich, Füchse vermehren sich anhand der Hasenmenge, usw. Das Layout und alles bekomme ich gut hin.
Und jetzt das eigentliche Problem: Wenn ich das versuche über einen (mir bekannten) Loop laufen zu lassen, egal welchen, dann stoppt das Programm kurz, ich kann nichts eingeben oder verändern, und zeigt mir dann den finalen wert an. Ich kann also während dem laufenden Loop keine Parameter verändern, und ich kann das "Wachstum" auch nicht beobachten, ich sehe nur den Anfang und das Ende.

An dieser Stelle bitte ich euch um Hilfe, und bevor ihr annehmt, ich sei hier super faul, würden mir auch ein paar Begriffe oder Stichwörter genügen, ich lese mich dann gerne rein. Aber gibt es, bzw. womit muss ich arbeiten um eine Art Loop zu erhalten, der einfach läuft, und in den ich Parameter eingeben kann (plötzlich sterben 50% der Hasen, etc.) und der mir dann prompt beim nächsten Tick die aktuellsten Daten ausgibt.

For, while, do while usw. sind mir ein begriff, aber gibt es etwas, was ich übersehe? Vielleicht eine Lösung, die weit abseits dieses Themas liegt? Ich komme nicht weiter o.0
 
K

kneitzel

Gast
Ohne Details von Dir ist es etwas Rätzelraten. Aber bei den UI Frameworks ist es so, dass es einen UI Thread gibt. Dieser macht eigentlich nichts anderes, als ständig zu prüfen, ob Events vorliege, auf die reagiert werden muss. Events können alles mögliche sein:
- Anwender hat etwas gemacht, z.B. ein Mausclick
- Es gibt eine Anforderung von außen z.B. die Anforderung, dass etwas neu gemalt werden soll. (Fenster hat sich aktualisiert, ein verdeckter Bereich ist nicht mehr verdeckt, was auch immer ...)

Und wenn Du nun einen Control änderst (also z.B. einem Label ein neuen Wert zuweist), dann passieren zwei Dinge:
- in dem Objekt wird der Wert angepasst.
- Das Objekt wird zum neu malen markiert und ggf. ein Event in die Eventloop gesetzt, dass ein neu Malen getriggert werden soll.

Diese Events landen dann auch irgendwann bei Dir, z.B. der Eventhandler für einen Mausclick. Dies bedeutet aber, dass dieser Code nun im UI Thread ausgeführt wird. So lange wie Du da also irgend was machst, wird das Fenster nicht aktualisiert (neu gemalt), denn dazu müsste der UIThread ja erst einmal das Event zum neu malen abarbeiten.

Somit gilt die Regel, dass man keinerlei langlaufende Dinge im UI Thread machen sollte.

Hier gibt es nun diverse Möglichkeiten:
a) Man kann langlaufende Dinge in einem separaten Thread durchführen.
b) Wenn es Dir um mehrere, zeitlich hintereinander durchzuführende Tätigkeiten geht, dann ist ein Timer sinnvoll.

Hier kommt aber dann evtl. gleich das nächste Problem: Viele Framework sind nicht thread sicher und mögen es nicht wirklich, wenn sie von außerhalb des UI Threads aktualisiert werden. Daher haben so Frameworks oft Ihre eigenen Timer, die dann im UIThread laufen (Gut für schnelle Dinge, wie z.B. bei Dir um alle x Sekunden eben schnell eine neue Anzahl an Pflanzen, Hasen und Füchsen zu berechnen.) sowie eine Hilfreiche Implementierung für lang laufende Prozesse, die zwischendurch etwas updaten wollen.

Bei Swing sind hier konkret zu nennen:
https://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html#threading Abschnitt über Swings Threading Policy
https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html SwingWorker für langlaufende Sachen.
https://docs.oracle.com/javase/7/do...tilities.html#invokeLater(java.lang.Runnable) SwingUtilities.invokeLater um kurze Aktionen auf dem UIThread lauden zu lassen (z.B. die Aktualisierung von Labels, so man auf einem anderen Thread ist als dem UIThread)
https://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html der Timer von Swing
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B TableView: laufender Saldo mit BigDecimal? Java Basics - Anfänger-Themen 6
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
C Threads Auffindung noch laufender Programmteile Java Basics - Anfänger-Themen 2
A Dateinamen mit laufender Nummer erzeugen! Wie? Java Basics - Anfänger-Themen 9
S Objekte mit laufender Nummer erzeugen Java Basics - Anfänger-Themen 3
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
I Scanner Loop Java Basics - Anfänger-Themen 1
J Erste Schritte Unendlichen Loop stoppen Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
L loop für Namen Java Basics - Anfänger-Themen 11
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
iman Loop Java Basics - Anfänger-Themen 21
P for-loop Java Basics - Anfänger-Themen 10
B Verwirrender Game Loop Java Basics - Anfänger-Themen 6
W While-Loop unterbrechen Java Basics - Anfänger-Themen 4
I TextField Array mit for Loop erzeugen Java Basics - Anfänger-Themen 4
D Was ist Loop: ? Java Basics - Anfänger-Themen 13
Zeekay Development Erste Schritte Spitzen via For-Loop Java Basics - Anfänger-Themen 4
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
K Loop ohne Schleifen Java Basics - Anfänger-Themen 2
M bufferedreader loop stoppen Java Basics - Anfänger-Themen 2
R window-Klasse, main-loop und unausschaltbares anti-aliasing Java Basics - Anfänger-Themen 0
S clip.loop(Clip.LOOP_CONTINUOUSLY); stoppen klappt nicht! Java Basics - Anfänger-Themen 11
S Warum erlaubt ein while-Loop keine Variablen-Declaration wie der for-Loop..? Java Basics - Anfänger-Themen 6
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
E Integer oder Strings spiegeln (in while loop) Java Basics - Anfänger-Themen 6
G Game Loop Problem Java Basics - Anfänger-Themen 9
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
D Loop Funktion für Robot Klasse Java Basics - Anfänger-Themen 5
Devil0s while loop, Button action Java Basics - Anfänger-Themen 8
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
L Mit ChangeListener JSpinner Loop erstellen Java Basics - Anfänger-Themen 2
N Problem mit Loop Java Basics - Anfänger-Themen 2
A For each loop Java Basics - Anfänger-Themen 3
A Vectors in for-loop Java Basics - Anfänger-Themen 6
S For-Each Loop Java Basics - Anfänger-Themen 16
G Loop blockt alle Events Java Basics - Anfänger-Themen 7
G Loop funktion Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben