0

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

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);
}
4

3 回答 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);
}
于 2013-04-05T18:37:16.240 回答
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); 
}
于 2013-04-05T18:36:01.747 回答
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。

于 2013-04-05T18:39:44.543 回答