Вопрос дня: как вызвать функцию контроллеров из другого потока.Мое приложение выглядит так:
public class Server {
//(...)
public String setMsg(String string) {
msg.set(string+"\n");
mainScreenController.updateLog();
}
//(...)
while (true){
doThings();
}
}
public class MainScreenController {
//(...)
public void startServer(){
new Thread(server::start).start();
}
public void updateLog(){
Platform.runLater(()->{ testAreaLog.setText(testAreaLog.getText() + server.getMsg()); });
}
//(...)
}
Я хочу вызвать updateLog()
в блоке finally, поэтому каждый раз, когда сервер обновляет msg
, GUI добавляет это сообщение в окно журнала.Мой msg
-
private volatile AtomicReference<String> msg = new AtomicReference<String>();
, он работает, когда я звоню updateLog();
в startServer()
, отображает первое сообщение Starting server
, как вы уже догадались, но вызов другого updateLog();
возвращает null
поэтому я хотел вызвать его сразу после использования getMsg()
.