2016-01-20 49 views
1

当我有一个boolean用来检查是否一个动作是要执行与否,boolean被正在通过setters and getters访问,我有一个类似的方式与其他booleans上午访问,他们都没有给我任何除了这个错误之外,起初我是在一段单独的线程中检查它的代码,并且该部分在没有产生异常的情况下不工作,所以我把它放在一个toggleButton中,只是为了做一个简单的readwrite,然后nullPointerException想来了,这里是我的代码我已评论它NullPointerException异常访问布尔的Java

toggleButton.setOnMousePressed(new EventHandler<MouseEvent>() { 
     @Override public void handle(MouseEvent event) { 
     //this part is executing perfectly 
     //meaning my toggleButton is ok 
     System.out.println("Toggle Button Clicked"); 

     //this is where I am getting the NullPointerException 
     if(!getblackAndWhite()){ 

      setblackAndWhite(true); 

     }else{ 

       setblackAndWhite(false); 

      } 
     }}); 


private void setblackAndWhite(Boolean blackAndWhite) 

{ 
    this.blackAndWhite = blackAndWhite; 
} 

private Boolean getblackAndWhite() 
{ 
    return this.blackAndWhite; 
} 
+1

你可以发布stackstrace –

+1

添加blackAndWhite的声明! (布尔值还是布尔值?) – Gavriel

+0

已被解答谢谢 –

回答

3

Then blackAndWhite is null(默认值)。在getblackAndWhite()检查null初始化它,当你声明它(假设你想用虚假的开始)可能看起来像,

private Boolean blackAndWhite = false; 

。像,

public Boolean getblackAndWhite() { 
    if (blackAndWhite == null) return false; 
    return blackAndWhite; 
} 
+0

:D你不会说:D我想我跳过本应该初始化布尔值的那一部分,我认为它是一个简单的数据类型 –

+2

或更改为使用原始布尔类型而不是包装类型。该基元的默认值为false,因此如果您忘记初始化它,则默认为false,您可以避开NPE。 –

+0

@WendieLamero'boolean'是一个原始类型,它的默认值(作为一个实例变量)是'false'。 'Boolean'是一个引用类型,它的默认值(作为一个实例变量)是'null'。 –

2

如果不设定blackAndWhite在构造函数的值,并调用getblackAndWhite()之前它被设置你会得到一个空指针异常(NPE)

1

布尔是一个对象。是否初始化?