Java Vaadin复选框对象变为空

Java Vaadin复选框对象变为空,java,vaadin,Java,Vaadin,我有一个瓦丁物体: CheckBox mycb = new CheckBox("caption"); 稍后,此复选框的值将从数据库中更新,如下所示: mycb.setValue(dbvalue); dbvalue在数据库中实际上为空mycb在此行之前为非null,在此行之后为null。它的值不应该保持不变,只返回null吗 此外,尝试通过短路评估避免NullPointerException: if (mycb != null && mycb.getValue() == tru

我有一个瓦丁物体:

CheckBox mycb = new CheckBox("caption");
稍后,此复选框的值将从数据库中更新,如下所示:

mycb.setValue(dbvalue);
dbvalue
在数据库中实际上为空
mycb
在此行之前为非null,在此行之后为null。它的值不应该保持不变,只返回null吗

此外,尝试通过短路评估避免NullPointerException:

if (mycb != null && mycb.getValue() == true) 
...

这无论如何都会产生一个NullPointerException。这是正常的行为还是我做错了什么?

你说自己的mycb实际上没有变为空。太好了

if (mycb != null && mycb.getValue() == true) 
这会抛出一个
NullPointerException
,因为Java试图将
mycb.getValue()
的结果强制转换为
boolean
。但是因为
mycb.getValue()
返回
null
,所以它抛出
NullPointerException

将其更改为:

if (mycb.getValue() != null && mycb.getValue() == true)

或者类似的事情

你说自己的mycb实际上并没有变为空。太好了

if (mycb != null && mycb.getValue() == true) 
这会抛出一个
NullPointerException
,因为Java试图将
mycb.getValue()
的结果强制转换为
boolean
。但是因为
mycb.getValue()
返回
null
,所以它抛出
NullPointerException

将其更改为:

if (mycb.getValue() != null && mycb.getValue() == true)

或者类似的

调用setValue后,mycb变为null的唯一方法是,如果该方法以某种方式(向下)访问相同的mycb变量。可能有某个事件侦听器侦听语句mycb=null?mycb是局部变量吗?您是否向mycb添加了任何侦听器,尤其是ValueChangeListener?@Davidenhove,mycb是一个字段,我尝试了“private”和“final”,结果是相同的。@kukis,是的,如果字段是final,则有一个侦听器会使用.getValue()检查其值,在成功地对其调用方法之后,它完全不可能为null。您确定在方法调用之后mycb==null吗?如果是这样,请说明您是如何验证它的。调用setValue后,mycb变为null的唯一方法是该方法是否以某种方式(向下)访问相同的mycb变量。可能有某个事件侦听器侦听语句mycb=null?mycb是局部变量吗?您是否向mycb添加了任何侦听器,尤其是ValueChangeListener?@Davidenhove,mycb是一个字段,我尝试了“private”和“final”,结果是相同的。@kukis,是的,如果字段是final,则有一个侦听器会使用.getValue()检查其值,在成功地对其调用方法之后,它完全不可能为null。您确定在方法调用之后mycb==null吗?如果是,请说明您是如何验证它的工作原理的。结论:它最终与Vaadin无关,在Java中只是执行“Boolean b=null;if(b);”得到一个NPE;)它起作用了。结论:它最终与Vaadin无关,在Java中只是执行“Boolean b=null;if(b);”得到一个NPE;)