2016-01-20 91 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

布爾是一個對象。是否初始化?