You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX MVC架构项目调用update时clientsList空指针异常问题

问题根因

你往观察者列表里注册的ServerView实例,和FXMLLoader加载FXML时自动创建的控制器实例不是同一个对象:

  • FXML加载过程中,FXMLLoader会反射创建fx:controller属性指定类的实例,自动完成@FXML字段注入,所以这个实例的initialize方法能正常操作clientsList
  • 你手动new ServerView()创建的实例,不会触发FXML注入流程,所有@FXML注解的字段默认都是null,你把这个手动创建的实例加到了观察者列表,调用update的时候自然会抛出空指针
解决方案

你需要拿到FXMLLoader加载后生成的控制器实例,把这个实例注册到观察者列表,而不是自己手动new实例:

  1. 加载FXML时获取控制器实例
FXMLLoader loader = new FXMLLoader(getClass().getResource("你的server_view.fxml文件路径"));
Parent root = loader.load();
// 拿到FXML自动创建的控制器实例
ServerView serverViewController = loader.getController();
// 把这个实例注册到你的观察者列表,不要用new ServerView()
game.addObserver(serverViewController);
  1. 可选防护补充
    可以在update方法里加空判断,避免极端场景崩溃:
@Override
public synchronized void update(Model m) {
    System.out.println("[UPDATE] "+Thread.currentThread().getName());
    if (clientsList != null) {
        clientsList.setText("test");
    }
}

你之前加的Platform.runLater逻辑是正确的,JavaFX UI操作必须在FX Application Thread执行,这部分不需要修改。


内容的提问来源于stack exchange,提问作者guillaumearnx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:45:09