スタートボタンを押したときに開始するスレッドがあります。私がしたいのは、私のスレッドが変更を加える情報を含むように、ラベルを再描画することです。私が直面している唯一の問題は、スレッドが実行された後にのみjLabelが再描画することです。スレッドが実行されている間に誰かがどのように再描画できるかについて誰かに懇願してくれますか?ありがとう。ここでスレッドの実行中にスイングコンポーネントを再描画
は、私のコードの抜粋です:
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
}
}
EDTのwhileループを実行しないでください。ただし、スレッドが 'noOfClients.setText(何でも)'を呼び出すと、すでに発生しているはずの再描画イベントがスレッドによってトリガーされます。 – Thomas
スイングスレッドをブロックしないでください。再ペインティングは、アクションメソッドの実行後にのみ呼び出されます。 'repaint()'は再描画を行いませんが、後でコンポーネントを再描画する必要があることを通知します。 [SwingのConcurency](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/) –
SwingUtilities.invokeAndWait()のsetText()をラップする – StanislavL