JavaFX: изменить текст label с потока
знаю что очень много похожих тем и, побродив по просторам интернета, наткнулся на возможные решения моей проблемы с помощью Task, Service и метода Platform.runLater(). Увы, не могу подстроить эти варианты под свой код в котором есть Контроллер пользовательского интерфейса и Мой класс - поток. Итак вопрос:
Что посоветуете да изменения метки curMoney из потока в классе Tactic?
public class Tactic implements Runnable{
@Override
public void run() {
while(true){
money += income;
System.out.println((int)money); // Вместо этого ожидается label.setText(money);
try {
Thread.sleep(speed);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Контроллер
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class Controller {
@FXML
private Label curMoney;
@FXML
private Label curIncome;
@FXML
void initialize() {
Thread thread = new Thread(new Tactic());
thread.start();
}
}
Ответы (1 шт):
Автор решения: Olmicron
→ Ссылка
public class Tactic implements Runnable{
@Override
public void run() {
while(true){
money += income;
Platform.runLater(() -> {
// Тут выводим результат в интерфейс
label.setText(money);
});
try {
Thread.sleep(speed);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Только позаботьтесь о синхронизации переменной money