JavaFX 和 Spring Boot - NPE

2023-12-12

我仍在与我的问题作斗争。我想使用 Spring Framework 来注入依赖项,并且必须使用 Spring boot 来集成两者。 不幸的是,在第一个视图中,自动装配运行正确,但如果我进入下一个阶段,我仍然只能Null Pointer Exception.

那是主要课程:

@SpringBootApplication(scanBasePackages = "boxingchallenge")
public class BoxingChallengeApplication extends Application {

    public ConfigurableApplicationContext springContext;
    private Parent root;
    public static Stage stage;

    @Override
    public void init() throws Exception {
        springContext = SpringApplication.run(BoxingChallengeApplication.class);
        springContext.getAutowireCapableBeanFactory().autowireBean(this);
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/FXML/start.fxml"));
        fxmlLoader.setControllerFactory(springContext::getBean);
        root = fxmlLoader.load();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        stage = primaryStage;
        primaryStage.setTitle("Boxing challenge");
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    @Override
    public void stop() {
        springContext.stop();
    }

    public static void main(String[] args) {
        launch(BoxingChallengeApplication.class, args);
    }
}

在第一个控制器类中,自动装配运行得很酷:

@Component
public class Start {

    @FXML
    public Button loadGame;
    @FXML
    public Button create;

    @Autowired
    private Boxer boxer;

    public void load(ActionEvent event) {
        System.out.println(boxer.getName());
    }

    //next stage
    public void createNew(ActionEvent event) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("/FXML/creator.fxml"));
        BoxingChallengeApplication.stage.setScene(new Scene(root));
    }
}

在第二阶段,自动装配不起作用:

@Component
public class Creator {

    @FXML
    public Button ready;
    public TextField nation;
    public TextField name;
    public Boxer boxer;

    /*@Autowired
    private ApplicationContext context;*/

    @Autowired
    public void setBoxer(Boxer boxer) {
        this.boxer = boxer;
    }

    public void createdAndPlay(ActionEvent event) {
        if (boxer == null)
            System.out.println("boxer is null");
        else
            System.out.println("Injected correctly");
    }
}

谢谢,希望能完结...


@Jewelsea 的评论是正确的:加载时必须设置控制器工厂creator.fxml。如果您不这样做,则FXMLLoader只需调用其无参数构造函数即可创建控制器,因此 Spring 对它一无所知,也没有机会注入任何依赖项。

为此,您只需访问ApplicationContext in Start,并且您可以注入“众所周知的对象”,其中ApplicationContext是一个例子,在你的Spring管理的bean中:

@Component
public class Start {

    @FXML
    public Button loadGame;
    @FXML
    public Button create;

    @Autowired
    private Boxer boxer;

    @Autowired
    private ApplicationContext context ;

    public void load(ActionEvent event) {
        System.out.println(boxer.getName());
    }

    //next stage
    public void createNew(ActionEvent event) throws IOException {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/FXML/creator.fxml"));
        load.setControllerFactory(context::getBean);
        Parent root = loader.load();
        BoxingChallengeApplication.stage.setScene(new Scene(root));
    }
}

顺便说一句,当您加载 FXML 文件时,您几乎肯定需要任何控制器的新实例,因此您应该创建任何控制器prototype scope.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 和 Spring Boot - NPE 的相关文章

随机推荐

  • 将表 A 中的行移动到表存档中

    是否可以每周自动将 3 天前的行移动到 mysql 中另一个名为 Table Archive 的表中 表A例如 ID stringvalue Timestamp 1 abc 2011 10 01 2 abc2 2011 10 02 3 ab
  • JPA/Hibernate 提高批量插入性能

    我有一个数据模型 该模型在 1 个实体和 11 个其他实体之间具有一对多关系 这12个实体一起代表一个数据包 我遇到的问题与这些关系的 多 侧发生的插入数量有关 其中一些可以有多达 100 个单独的值 因此要将整个数据包保存在数据库中 最多
  • git如何存储文件?

    我刚刚开始学习 git 为此我开始阅读Git 社区书籍 在这本书中他们说SVN和CVS存储文件之间的差异 而git存储所有文件的快照 但我不太明白他们所说的快照是什么意思 git 真的会在每次提交时生成所有文件的副本吗 因为这就是我从他们的
  • C++ 随机数

    在以下情况 http www fredosaurus com notes cpp misc random html 它提到如果我们想生成一个范围内的随机数1 10 我们可以执行以下操作 r rand 10 1 为什么我们要添加1 您能解释一
  • iPhone URL 编码问题

    有一个小问题 尝试将 XML 发布到服务器 为此 我必须以 URL 格式对 XML 字符串进行编码 NSString encodedString NSString stringWithFormat xmlValue post stringB
  • Bash Shell:无法使用变量 $ 作为运行 tar 的路径

    这是一个非常简短的问题 但是放置变量是否存在语法错误 example作为 bash 文件中 tar 的参数 我将文件写为 only portion that really matters bin bash tar cvpzf filenam
  • ItemCommand 在 Repeater 或 GridView 中第一次单击时不会触发

    这两天已经让我发疯了 希望有人以前见过这个 我遇到这样的问题 第一次单击中继器或网格视图中的控件无法触发 ItemCommand 事件 但所有后续单击都有效 控件被加载到 Base aspx 上的占位符中 如下所示 private void
  • Cordova Web视图在android中清除缓存

    我正在尝试清除存储在使用 cordova webview 的 android 应用程序中的缓存 我尝试过cordovaWebView clearCache true 还尝试过 public void deleteCache Context
  • uintptr_t 数据类型是什么?

    What is uintptr t它可以用来做什么 首先 在提出问题时 uintptr t不是用C 写的 它在 C99 中 在
  • 如何在 Android 中将颜色 LUT 应用于位图图像以获得滤镜效果?

    这里我有一个关于 android 中的 LUT 的问题 我的问题是 我有 4X4 LUT 使用这些 LUT 对 Android 中的位图图像应用滤镜效果 下面是我的示例 LUT 文件链接 Lut 链接示例 在安卓上可以实现吗 如果可以的话请
  • 如何在 Eclipse Juno/Kepler/Luna CDT 中启用 C++11?

    编辑 事实证明这确实不是 Eclipse Kepler 特有的 我必须对 Eclipse Juno 使用相同的过程 问题是 在回答同一问题的其他帖子中似乎缺少步骤 我正在使用 Eclipse Kepler for C 并尝试使用 C 11
  • 在 Linux 中混合使用 32 位和 64 位库 (gcc)

    我有一个为 Linux 使用 gcc 构建的 32 位纯二进制 C so 由供应商提供 我需要链接到 64 位 C C 应用程序 我正在开发 有什么方法可以从我的应用程序访问这个库吗 我知道需要小心处理 so 内部函数的参数和指针 而且我知
  • 如何将向量转换为Json对象? C++

    我有一个 RoomData 对象向量 这是该对象 typedef struct RoomData unsigned int id std string name std string maxPlayers unsigned int ques
  • setTimeout 循环。如何获得正确的订单

    我试图在循环中调用一个函数以实现不同的超时或延迟 for var i 0 i lt 10 i callDelayedFunction i function callDelayedFunction i setTimeout function
  • 将多个对象从 Angular 控制器发布到 Web API 2

    我能够从我的角度控制器发送一个原始 json 对象 该对象在我的 web api 方法中反序列化为已知类型 这很棒 但我现在需要能够在同一请求中发送其他参数 这些参数可以是 json 对象或简单类型 如 string 或 int 我看过类似
  • 同一域上的 CloudFront 静态网站和 EC2 API

    我的静态网站托管在 CloudFront 上 有没有办法让我使用相同的域名但不同的端口来调用 EC2 实例的 API Eg example com 3000应重定向到 EC2 实例 而example com aka example com
  • 通过隔行扫描加载图像 - 从低分辨率到全分辨率 - HTML

    我正在创建一个使用图像作为背景的网站 我讨厌从上到下加载图像 因为它只会使页面在加载时看起来很糟糕 我见过一些网站加载非常低分辨率的图像 然后逐渐提升到全分辨率照片 我希望我的网站也能这样做 但我不知道如何实现 这是否需要多个图像文件和更多
  • 从麦克风获取音频并将其写入 iOS 上的套接字

    这就是我想做的 从麦克风获取音频 采用 AAC G 711 或 G 726 编码 将编码帧写入套接字 我找到了很多例子 但它们都写入文件 您能否将我链接到任何具有输出缓冲区或回调的教程 文档 示例 库 我通过修改 Apple 的 Speak
  • 什么是 JAXB?为什么要使用它? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 这里有人发誓 JAXB 是自切片面包以来最伟大的东西 我很好奇 Stack Overflow 用户认为 JAXB 的用例是什么 以及是什么使它成为该用例的好或坏解决方案 我是用于操作 XM
  • JavaFX 和 Spring Boot - NPE

    我仍在与我的问题作斗争 我想使用 Spring Framework 来注入依赖项 并且必须使用 Spring boot 来集成两者 不幸的是 在第一个视图中 自动装配运行正确 但如果我进入下一个阶段 我仍然只能Null Pointer Ex