在我用按钮制作的游戏中,当我点击" next"按钮,我会其他一些按钮变成灰色'这样你就无法点击它们。我在ActionListener中为' Next'按钮:
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 :(得分:4)
您正在尝试调用null变量的方法,因此这表明您调用setEnabled(...)
的一个或所有JButton变量都为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);
};
}