为什么局部变量抛出带有Jooq和JavaFX的NPE?

为什么局部变量抛出带有Jooq和JavaFX的NPE?,java,javafx,jooq,Java,Javafx,Jooq,在我的JavaFX和Jooq项目中,像往常一样编写代码,我注意到了以下有趣的行为: private JooqRecord foo; @FXML private Label bar; public void loadFoo(JooqRecord r) { this.foo = r; this.bar.setText(r.getBar()); // This is null } 此代码将抛出NullPointerException,但如果我这样做: priv

在我的JavaFX和Jooq项目中,像往常一样编写代码,我注意到了以下有趣的行为:

private JooqRecord foo;

@FXML
private Label bar;

public void loadFoo(JooqRecord r) {

        this.foo = r;

        this.bar.setText(r.getBar()); // This is null
}
此代码将抛出NullPointerException,但如果我这样做:

private JooqRecord foo;

@FXML
private Label bar;

public void loadFoo(JooqRecord r) {

        this.foo = r;

        this.bar.setText(foo.getBar()); // Works as intended
}
它完全按照预期工作

如果在分配给全局变量后,我将
r
打印到控制台,它将很好地打印记录


为什么会发生这种情况?

多线程使用JavaFX?我猜你有一个竞争条件:有时候FXML已经被加载,“bar”已经被FXML注入,有时候没有。我觉得这很难相信;你能创造一个新的世界吗。当你得到
NullPointerException
r
bar
时,什么是
null
?我不确定我能不能创建一个MCVE,但我也不想真的相信它。在我尝试将变量从局部变量更改为全局变量之前,这个问题已经存在了2小时。我可能必须补充一点,我也在为POJO使用Jooq生成的代码类。@James_D我个人觉得这个hella接近MCVE。