Ich habe einen Thread, den ich starte, wenn ich den Startknopf drücke. Ich möchte die Labels neu streichen, damit sie die Informationen enthalten, an denen mein Thread Änderungen vornimmt. Das einzige Problem, mit dem ich konfrontiert bin, ist, dass die jLabels nur dann neu streichen, wenn der Thread fertig ist. Kann mir jemand irgendwas sagen, wie ich es neu streichen kann, während der Thread läuft? Vielen Dank.Repaint eine Schwungkomponente, während ein Thread läuft
Hier ist ein Ausschnitt aus meinem Code:
Store m = new Store(); //Store extends Thread
private void startActionPerformed(java.awt.event.ActionEvent evt) {
....
//I get the simulation time of the store from a textbox
//the thread runs for this number of seconds
//when it is done, the store is closed(the open variable is set to false)
....
m.start();
while (m.isOpen()) {
queue0.setText(String.valueOf(m.clientiCasai(0)));
//here I will have more queues
....
noOfClients.repaint(); //this is the label that should show the number of clients in queue 0
}
}
Führen Sie diese while-Schleife nicht auf dem EDT aus, sondern lassen Sie Ihren Thread die Repaint-Ereignisse auslösen, was bereits geschehen sollte, wenn der Thread 'noOfClients.setText (whatever) 'aufruft. – Thomas
Blockieren Sie den Swing-Thread nicht. Neuanstrich wird erst aufgerufen, nachdem Ihre Aktionsmethode ausgeführt wurde. 'repaint()' führt keine Neubemalung durch, sondern informiert nur Swing, dass die Komponente später neu gestrichen werden muss. Für weitere Informationen lesen Sie bitte [Concurcency in Swing] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/) –
Wrap in setText() in SwingUtilities.invokeAndWait() – StanislavL