如何使用 JavaFX 8 插入整数数据?

How to insert Integer data with JavaFX 8?

我有一个表格,想插入整数数据。这是 POJO :

IntNumberData.class

...
private final IntegerProperty num;

public IntNumberData() {
    this(null);
}

public IntNumberData(Integer num) {
    this.num    = new SimpleIntegerProperty(num);
}

public Integer getNum() {
    return num.get();
}

public void setNum(Integer num) {
    this.num.set(num);
}

public IntegerProperty numProperty() {
    return num;
}
...

还创建了另一个 类,当我尝试添加数据时,我收到消息:

Caused by: java.lang.NullPointerException at net.websimp.numdata.model.Intnumberdata.(Intnumberdata.java:11) at net.websimp.numdata.controller.IntnumberdataController.handleNewNum(IntnumberdataController.java:35)

我测试了所有引用,但是当将类型 Integer 更改为 String 时有效。为什么?

我认为你的错误来自空值(我很确定实际上是因为我现在测试过)。

运行 看到它冲突的这个片段:

Integer n = null;
SimpleIntegerProperty p = new SimpleIntegerProperty(n);`

例如,您可以将其初始化为 0,或者在您的情况下不适用?

有了 Optional<R>,你可以分发可选的东西...看看 this

SimpleIntegerProperty 的构造函数采用 int(即 而不是 Integer)。所以你的构造函数

public IntNumberData(Integer num) {
    this.num    = new SimpleIntegerProperty(num);
}

隐式拆箱 num,即有效编译为

public IntNumberData(Integer num) {
    this.num    = new SimpleIntegerProperty(num.intValue());
}

如果 numnull,它将抛出 NullPointerException

您可以改为

public IntNumberData(Integer num) {
    this.num    = new SimpleIntegerProperty();
    this.num.setValue(num);
}

但请注意,如果传入 null(请参阅 documentation),实现会将其设置为 0

如果您真的想要支持空值的 Integer 类型的 属性,那么您应该使用 ObjectProperty<Integer> 而不是 IntegerProperty