Swing Warten, bis eine GUI-Komponente aktualisiert ist?

icarus2

Top Contributor
Ahoi!

Ich habe für meine Maturaarbeit das N Damen Problem behandelt.

Ich habe folgendes Problem:
In meinen Problem werden die Konfigurationen gezeichnet und als Text ausgegeben in einem JTextArea. Das Problem ist nun, dass in der JTextArea der Text nicht schnell genug aktualisiert ist. Ich habe den Algo so implementiert, dass man ihn in verschiedenen Geschwindigkeiten ablaufen lassen kann.
Bei langsamem Ablaufen geht alles perfekt. Gibt man dem Rechner aber weniger als 8 Millisekunden in der sleep()-Methode, so wird der Text in der JTextArea falsch ausgegeben. (Ich weiss wiso es ist, aber das tut nicht wirklich viel zur Sache).

Da ich den Algo möglichst schnell ablaufen lassen möchte, will ich ihm nicht einfach sicherheitshalber 10 Millisekunden geben, weil er dadurch sehr langsam wird.

Gibt es Möglichkeiten auf die GUI-Aktualisierung zu warten? Wäre eventuell EventQueue.invokeAndWait(...) was?
 

hdi

Top Contributor
Wäre eventuell EventQueue.invokeAndWait(...) was?
Ja, genau das ist es ;) Wobei dann halt dein Programm nicht wirklich in der angegebenen Geschwindigkeit läuft. zB bei 3ms ist zwar das sleep nur 3ms, aber du könntest auch noch 10ms auf den EDT warten.

Alernativ updatest du bei steigender Geschwindigkeit des Programms die TextArea weniger oft, sodass die Queue nicht überfüllt wird. zB bei 5ms schickst du ein Textarea-Update nur alle 10 Durchläufe raus. Man darf halt nie vergessen dass der EDT ein Programm verlangsamt. Wenn du zB beim Laden eines Bildes bei jedem Byte eine ProgressBar updatest, dauert das Laden (scheinbar) 10 Sekunden. Aber das liegt nicht am Bild, sondern an den hunderttausenden Aufträgen in der EDT Queue.
 
Zuletzt bearbeitet:

icarus2

Top Contributor
Oki, alles klar =)

Ich habe früher mal versucht invokeAndWait(..) zu verwenden, wurden aber immer Exceptions geworfen und so weiter ^^ Ich geh jetzt ersma aus, werde mir das morgen aber mal genau anschauen. Ich muss mich sowiso mal genauer in das Thema einarbeiten.

Hat jemand vielleicht einen Online-Tip, bei dem alles sehr gut und detailliert erklärt wird? Im Handbuch der Java-Programmierung steht da nicht wirklich was drin soweit ich weiss.
 

hdi

Top Contributor
Über den EDT:
Swing threading and the event-dispatch thread - JavaWorld

Und nochmal um mich klarer auszudrücken: Du updatest einfach zu oft. Du sagst ab 8ms kriegst du Probleme, rechnen wir das nach. Sagen wir mal deine Berechung an sich braucht keine Zeit, also 0ms, dann hast du bei 8ms sleeptime 125 Schleifendurchgänge in deinem Loop. Wenn du jedes mal die TextArea updatest, sind das 125 Aufträge pro Sekunde. Selbst wenn er alle 125 in einer Sekunde abarbeitet, hast du 125 mal ein Update auf der GUI. Dein Monitor wird aber nicht mehr als 60-75 Hz haben, das heisst etwa die Hälfte aller Updates wird gar nicht dargestellt werden können.
Außerdem kann ein Mensch bei nicht-interaktiven Programmen (er schaut also nur zu was angezeigt wird) ab 25 Bildenr pro Sekunde keinen Unterschied mehr erkennen.*

Summa summarum: Achte einfach drauf, dass du deine Textarea nicht öfters als 25 mal pro Sekunde updatest, dann wird dein Programm auch bei 1ms nicht so langsam, dass der EDT deinen Thread ausbremsen kann. Und ein inokeAndWait solltest du dir dann auch sparen können.

* Bei Games ist das etwas anderes, da merkt man auch noch den Unterschied zwischen 80 und 100 fps, aber das hat etwas mit der Erwartungshaltung auf eine Reaktion nach einer Aktion zu tun, oder anders gesagt: Wenn ich nach links drücke, muss sich etwas auf dem Schirm nach links bewegen. Da stoppt das Gehirn schon ab dem Zeitpunkt, wo du überhaupt erst daran denkst, die Taste zu drücken, und es "meckert" schon nach wenigen Millisekunden Verzögerung, denn Nervengeschwindigkeit ist SEHR schnell. Jeder kennt zB das Phänomen dass die erste Sekunde wenn man auf die Uhr schaut langsamer zu vergehen scheint als alle weiteren. Genau daher kommt das. Trifft aber auch nur auf schnelle Spiele zu, bestes Bsp ist Counter-Strike. Jeder spielt das mit 100fps, mit 60fps hast du einen riesen Nachteil bei dem Spiel.
 
Zuletzt bearbeitet:

icarus2

Top Contributor
Habe den Artikel gelesen, der ist super, vielen Dank dafür =)

Das Problem ist, dass der Algorithmus hat möglichst schnell laufen sollte. Deswegen muss ich die GUI so schnell updaten. Ich kann das Konzept jetzt nicht mehr ändern, aber ich habe etwas gebastelt und jetzt schauts recht gut aus.

Das mit dem Games wusste ich nicht. Hätte nicht gedacht, dass man so schnell reagiert ^^


Vielen Dank
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
W Auf eine Eingabe warten? AWT, Swing, JavaFX & SWT 2
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
G FX warten bis ein anderes GUI Element ausgewählt wurde AWT, Swing, JavaFX & SWT 8
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
kodela Swing Anzeige des Warten-Cursors AWT, Swing, JavaFX & SWT 8
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
W JavaFX Webview warten bis Seite geladen geladen ? AWT, Swing, JavaFX & SWT 0
U Java FX Warten auf Textfield eingabe AWT, Swing, JavaFX & SWT 17
M JavaFX FadeTransition, warten bis beendet AWT, Swing, JavaFX & SWT 10
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
H Event Handling JavaFx - auf Event warten AWT, Swing, JavaFX & SWT 4
Thallius Auf Swingworker warten? AWT, Swing, JavaFX & SWT 5
D Swing Bei MenuSelectionManager auf Ausführung warten? AWT, Swing, JavaFX & SWT 5
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Warten auf komponente AWT, Swing, JavaFX & SWT 2
H AWT Auf Bestätigung warten AWT, Swing, JavaFX & SWT 6
B Timer, TimerTask und Warten AWT, Swing, JavaFX & SWT 4
L JavaFX Wait/Sleep/postedDelay - Einfach nur warten AWT, Swing, JavaFX & SWT 4
C Swing SwingWorker: Auf beendigung eines Formulars / einer Arbeit warten AWT, Swing, JavaFX & SWT 10
F JFrame nach Buttonklick 3 Sekunden warten, bevor es sich ändert AWT, Swing, JavaFX & SWT 2
C Schleife auf Mausklick warten lassen AWT, Swing, JavaFX & SWT 6
A Auf Tastendruck warten AWT, Swing, JavaFX & SWT 9
A Auf eingabe warten AWT, Swing, JavaFX & SWT 5
S auf paintComponent() warten AWT, Swing, JavaFX & SWT 34
B Warten bis neues ImageIcon zugewiesen ist AWT, Swing, JavaFX & SWT 3
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
M Hauptprogramm pausieren und auf Ergebnis eines JDialogs warten AWT, Swing, JavaFX & SWT 7
A Swing Warten bis JDialog fertig AWT, Swing, JavaFX & SWT 3
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
pinerski Swing Frame 1 soll auf Frame 2 warten AWT, Swing, JavaFX & SWT 4
0x7F800000 Allg. Frage zum ev. dispatch thread, wie korrekt auf reaktion der Listener warten? AWT, Swing, JavaFX & SWT 4
R JDialog "Bitte warten..." durchsichtig AWT, Swing, JavaFX & SWT 5
G JTable warten bis Spalte verschoben wurde AWT, Swing, JavaFX & SWT 2
C Warten auf Rückgabewert im EventDispatchingThread AWT, Swing, JavaFX & SWT 8
A Bitte warten Dialog AWT, Swing, JavaFX & SWT 4
G Auf Ergebnis vom Thread warten AWT, Swing, JavaFX & SWT 3
O Zwei Listener auf Komponente, warten auf Beendigun? AWT, Swing, JavaFX & SWT 2
R Warten auf Ergebnisse eines untergeordneten JFrame AWT, Swing, JavaFX & SWT 2
C Auf Ereignis warten AWT, Swing, JavaFX & SWT 7
L Warten, aber trotzdem "lebende" UI AWT, Swing, JavaFX & SWT 2
K Textfeld Programm soll auf Eingabe warten! AWT, Swing, JavaFX & SWT 4
B Auf Frame/Dialog warten AWT, Swing, JavaFX & SWT 2
A Programmunterbrechung und warten auf Benutzereingabe AWT, Swing, JavaFX & SWT 6
J Warten auf einen Dialog? AWT, Swing, JavaFX & SWT 2
J Programm warten, bis GUI geschlossen ist AWT, Swing, JavaFX & SWT 4
F Auf Thread warten ohne alles andere zu blockieren AWT, Swing, JavaFX & SWT 5
N malen => 1 Sekunde warten => malen AWT, Swing, JavaFX & SWT 2
m@nu Dialog während warten anzeigen AWT, Swing, JavaFX & SWT 3
U Auf Swings Reaktion warten AWT, Swing, JavaFX & SWT 3
C JFrame warten lassen AWT, Swing, JavaFX & SWT 11
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
mrbody234 ArrayList<Message> in eine TableView visualisieren AWT, Swing, JavaFX & SWT 2
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
Lukas2904 Wie speicher ich eine Einstellung? AWT, Swing, JavaFX & SWT 1
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Zwei JTables auf eine A4-Seite mit einstellbaren Rändern AWT, Swing, JavaFX & SWT 9
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
F Variablen an eine Form binden? AWT, Swing, JavaFX & SWT 2
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
W JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
Informatiknoob AWT Zahlenraten (eine Zahl zwischen 1 und 10) AWT, Swing, JavaFX & SWT 1
A eine Fehler AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J JavaFX Die Webview stellt eine Webseite nicht dar AWT, Swing, JavaFX & SWT 0
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
Thallius Swing JDatePicker oder Sucht jemand eine Aufgabe? AWT, Swing, JavaFX & SWT 0
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben