2010-04-19 136 views
0

在過去的幾個小時裏,我一直在努力解決這個問題。每次我上了一個JButton,單擊應該會打開一個JFrame(和它),我得到一個堆棧跟蹤說我必須在這些代碼位零點例外:NullPointerException Java幫助

A類中我有:

aButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     B instanceofB = new B(userSession.getBalance()); 
    } 
}); 

和B類

super.getSomeBtn().setVisible(false); 

這就是說棧跟蹤誤差是在上述兩個部分。 我有一個完全一樣的B類上面的一個線,它工作正常嗎?

真的卡在這裏!

+0

謝謝大家非常有用的回覆 – KP65 2010-04-19 22:03:56

回答

2

如果使用IDE等eclipse,請在NullPointerException上設置斷點。然後當你調試時檢查當時的局部變量來計算出什麼是null。 getSomeBtn()返回null意味着你的B類沒有初始化它,或者它正在調用錯誤的超類構造函數。但是,這裏確實沒有足夠的細節/上下文來提供任何幫助。如有疑問,請將調試器拿出來!

0

你可以分解這些語句來逐個檢查每個引用的空值。您可以使用print/log語句或斷言:

assert aButton != null; 
aButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     assert userSession != null; 
     B instanceofB = new B(userSession.getBalance()); 

     }); 

... 
assert super.getSomeBtn() != null; 
super.getSomeBtn().setVisible(false); 
1

這裏有利益,哪裏NPE可能發生3分:

  • super.getSomeBtn()可以爲null;
  • userSession可以爲空
  • B類的一些初始化代碼可以拋出該異常還,例如這樣的代碼

    對象_ONE = NULL; Object _two = _one.getClass();

在現場聲明期間會導致NPE。

看看這三點,我想你會發現一些東西。斷點/日誌/斷言 - 一切都將有所幫助。