NullPointerException,尝试将JPanel数组添加到Container

时间:2013-04-05 18:30:42

标签: java swing nullpointerexception jframe jlabel

无法弄清楚为什么我收到此异常,Console会返回此消息:

public static void main(String [] args){
JFrame b = new JFrame("Lotus");
Container pieces = new Container();
JLabel[] labelsP1 = new JLabel[10];
JLabel[] labelsP2 = new JLabel[10];

for(int i = 0 ; i < labelsP1.length ; i++){
    labelsP1[i] = new JLabel(B1); 
    for(int j = 0 ; j < labelsP2.length ; j++){
        labelsP2[j] = new JLabel(B2); 
    }
    for (JLabel label : labelsP1) {
        pieces.add(label);
    }

    Container c = b.getContentPane();
    c.setLayout(new GridLayout(13,3)); 
    c.add(pieces);
}

3 个答案:

答案 0 :(得分:3)

你的第3个内循环正在迭代抛出一个空数组

 for (JLabel label : labelsP1) {
        pieces.add(label);
    }

//

for(int i = 0 ; i < labelsP1.length ; i++)
{
    labelsP1[i] = new JLabel(B1); 
    for(int j = 0 ; j < labelsP2.length ; j++)
    {
        labelsP2[j] = new JLabel(B2); 
    }
    for (JLabel label : labelsP1)   // null only labelsP1[0] is initialized
    {
        pieces.add(label);        
    }

    Container c = b.getContentPane();
    c.setLayout(new GridLayout(13,3)); 
    c.add(pieces);
}

答案 1 :(得分:2)

对于初学者来说,看起来你并没有向我们展示所有困难的代码。 其次,你的第一个for循环包含所有代码后的意图是什么?你好像有一个支架错位问题。我猜你需要一个闭合支撑。

for(int i = 0 ; i < labelsP1.length ; i++){
        labelsP1[i] = new JLabel(B1); 
        for(int j = 0 ; j < labelsP2.length ; j++){
            labelsP2[j] = new JLabel(B2); 
    }

for(int i = 0 ; i < labelsP1.length ; i++) {
    labelsP1[i] = new JLabel(B1);
}

for(int j = 0 ; j < labelsP2.length ; j++) {
    labelsP2[j] = new JLabel(B2); 
}

答案 2 :(得分:0)

在下面的代码中:

for(int i = 0 ; i < labelsP1.length ; i++){
labelsP1[i] = new JLabel(B1); 
for(int j = 0 ; j < labelsP2.length ; j++){
    labelsP2[j] = new JLabel(B2); 
}
for (JLabel label : labelsP1) {
    pieces.add(label);
}

您将 JLabels 逐个添加到数组 labelsP1 ,并迭代数组。但是你试图访问它中不存在的所有元素。

我建议您删除嵌套的for循环以获得正确的行为并避免NullPointerException。

相关问题