2014-04-06 25 views
0

在我使用按鈕製作的遊戲中,當我點擊「下一步」按鈕時,其他一些按鈕變成「變灰」,因此您無法點擊它們。我有這樣的代碼在我的ActionListener的「下一步」按鈕:在ActionListener中調用setEnable

public class NextListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     nextButton.setEnabled(false); 
     callButton.setEnabled(false); 
     raiseButton.setEnabled(false); 
    } 
} 

然而,當我運行該程序,該按鈕不灰了,我得到的錯誤:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

爲什麼這不工作嗎?

+0

你有初始化爲'nextButton','callButton'和'raiseButton'你的參考? – PakkuDon

回答

4

你試圖調用null變量的方法,所以這表明你調用的一個或所有JButton變量爲setEnabled(...)爲null。解決方案:在嘗試調用變量的方法之前,先爲變量分配有效的引用。

這可以通過構造函數參數或一些這樣做。或者更好的辦法是,讓持有這些按鈕變量的類成爲一個公共方法,該方法允許您更改其按鈕的狀態,並將該對象的容器對象的引用傳遞給ActionListener。

例如,

import java.awt.event.ActionListener; 
import javax.swing.JButton; 

public class MyContainer { 
    JButton nextButton = new JButton("Next"); 
    JButton callButton = new JButton("Call"); 
    JButton raiseButton = new JButton("Raise"); 

    private ActionListener nextListener = new NextListener(this); 

    public void buttonsSetEnabled(boolean enabled) { 
     nextButton.setEnabled(enabled); 
     callButton.setEnabled(enabled); 
     raiseButton.setEnabled(enabled); 
    } 
} 

別處

public class NextListener implements ActionListener { 
    private MyContainer myContainer; 

    public NextListener(MyContainer myContainer) { 
     this.myContainer = myContainer; 
    } 

    public void actionPerformed(java.awt.event.ActionEvent e) { 
     myContainer.buttonsSetEnabled(false); 
    }; 
} 
相關問題