空指针异常

时间:2014-01-15 19:26:15

标签: java swing jpanel

我做了一个简单的功能:

public class AjouterBouton {

    public AjouterBouton(int nombre) {

        JButton[] buttons = new JButton[nombre];

        for(int i = 0; i < buttons.length; i++) {

            buttons[i] = new JButton();
            buttons[i].setBackground(Color.LIGHT_GRAY);
            JPanel pan = Main.grille;
            pan.add(buttons[i]);
        }
    }
}

“grille”是我主类中的简单JPanel:

JPanel grille = new JPanel();
int ligne = 6;
int colone = 5;
grille.setBounds(6, 117, 980, 314);
grille.setLayout(new GridLayout(ligne,colone));

最后,我将其添加到Main类中:

new AjouterBouton(72);

但是,我得到JavaNullPointerException

PS :我试过这个,有效:

final JButton[] buttons = new JButton[72];

for(int i = 0; i < buttons.length; i++) {

    buttons[i] = new JButton();
    buttons[i].setBackground(Color.LIGHT_GRAY);
    grille.add(buttons[i]);
}

但是我想用这个方法添加我的按钮。我是初学者;有人能帮我吗?

2 个答案:

答案 0 :(得分:1)

将JPanel的引用传递给构造函数方法:

public AjouterBouton(int nombre, JPanel pan)
{
    JButton[] buttons = new JButton[nombre];

    for(int i = 0; i < buttons.length; i++)
    {
        buttons[i] = new JButton();
        buttons[i].setBackground(Color.LIGHT_GRAY);
        //JPanel pan = Main.grille;
        pan.add(buttons[i]);
    }
}

在Main:

int ligne = 6;
int colone = 5;

JPanel grille = new JPanel();
grille.setBounds(6, 117, 980, 314);
grille.setLayout(new GridLayout(ligne,colone));
// this could be just a static method call: AddButtonsToPanel()
// doesn't need to be an object
AjouterBouton button = new AjouterBouton(72, grille);

答案 1 :(得分:0)

JPanel pan = Main.grille;

for方法的AjouterBouton循环中调用该行代码。当方法存在时将其丢弃。

在没有看到堆栈跟踪的情况下,我不得不站出来说你得到的是NullPointerException因为你试图在你的面板上添加pan已经正确实例化了。