У меня есть поток, который я запускаю, когда нажимаю кнопку запуска. То, что я хочу сделать, - это перекрасить ярлыки, чтобы они содержали информацию, которую вносит мой поток. Единственная проблема, с которой я сталкиваюсь, заключается в том, что jLabels перерисовываются только после того, как поток выполняется. Может ли кто-нибудь дать мне какие-либо предложения по поводу того, как я могу перерисовать его, когда поток запущен? Благодарю.Перерисовать компонент качания во время работы нитка
Вот отрывок из моего кода:
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
}
}
Не запускайте этот цикл while на EDT, но пусть ваш поток запускает события перерисовки, которые должны произойти, если поток вызывает 'noOfClients.setText (что угодно)'. – Thomas
Не блокируйте нить качания. Перекраска вызывается только после выполнения вашего действия. 'repaint()' не выполняет перекраски, а только сообщает swing, что компонент должен быть перекрашен позже. Для получения дополнительной информации о [Concurency in Swing] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/) –
Оберните в setText() в SwingUtilities.invokeAndWait() – StanislavL