2014-04-06 22 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); 
    }; 
} 
相关问题