当天的问题是:如何从另一个线程调用控制器函数。我的应用程序如下所示:
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()