Java中的ArrayIndexOutofBounds/NullPointerException问题

3

我在Java方面是个初学者。我的问题是,我正在尝试隐藏窗口的所有图片组件,并使一些其他组件出现。但问题是,每次我使用JComboBox选择一个项目时,它总是抛出异常:Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 10

这是错误的代码块:

for (cnt1=0; cnt1<10; cnt1++);
        {
            labels1[cnt1].setVisible(true);
        }

        for (cnt2=0; cnt2<10; cnt2++);
        {
            labels2[cnt2].setVisible(false);
        }


        for (cnt3=0; cnt1<10; cnt3++);
        {
            labels3[cnt3].setVisible(false);
        }

        for (cnt4=0; cnt4<10; cnt4++);
        {
            labels4[cnt4].setVisible(false);
        }

        for (cnt5=0; cnt5<10; cnt5++);
        {
            labels5[cnt5].setVisible(false);
        }

您能告诉我这里似乎出了什么问题吗?如果您需要,我可以发布整个代码。谢谢您提前的帮助。

编辑:我已经修复了数组中的错误,但是这一次,编译器给了我以下错误提示:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

顺便说一下,这是我数组声明的一部分代码片段:
String iconFiles1[] = {"Articuno.png", "Blastoise.png", "Charizard.png", "Kabutops.png", "Mewtwo.png", "Moltres.png", "Omastar.jpg", "Pikachu.jpg", "Venusaur.png", "Zapdos.png"};
String Jlabels1[] = {"Articuno", "Blastoise", "Charizard", "Kabutops", "Mewtwo", "Moltres", "Omastar", "Pikachu", "Venusaur", "Zapdos"};
ImageIcon icons1[] = new ImageIcon[iconFiles1.length];
JLabel labels1[] = new JLabel[Jlabels1.length];

这是它在GUI中的分配:

for (int cnt1=0; cnt1<labels1.length; cnt1++)
        {
            labels1[cnt1].setVisible(true);
        }

我做得对吗?欢迎回答。再次感谢。


答案将取决于labelsx[]数组中的内容。 - Juned Ahsan
这句话应该是 cnt3 for (cnt3=0; cnt1<10; cnt3++);,对吗? - Vikas V
1
第一行中的分号看起来不对。标签* - 数组中是什么? - zero0
为了更快地获得帮助,请发布一个SSCCE,它是一个简短的、可运行的、可编译的代码片段,可以生成异常。 - mKorbel
似乎您有标签1到[9] ... 但是您正在尝试访问labels1 [10] ... 您的第一个for循环后,ur cnt1 = 10。 - Michael Shrestha
@SageTheGreat,请看我的回答。它解释了这里发生了什么。 - Steve P.
4个回答

2

你的至少一个for循环中似乎存在错误的变量(正如其他一些帖子已经指出的那样)。

然而,你得到ArrayIndexOutOfBoundsException的原因是因为在所有for循环后面都有分号,从而使它们仅仅增加计数器变量。 你在for循环中增加的变量没有在for循环本身中局部声明,因此它们的作用域是你当前所在的函数(也就是说,它们存在于for循环之外)。 因此,当循环完成增加时,你的计数器将太大(在这种情况下是10)---> 因此会出现ArrayIndexOutOfBoundsException: 10


@SageTheGreat 这完全回答了你的问题。 - Steve P.
@SageTheGreat,由于您是新手,您应该参加tour - Steve P.

0
首先,你在每个 for 语句后面都有一个分号,这基本上告诉编译器循环而不执行代码。
for (cnt1=0; cnt1<10; cnt1++);
{
    labels1[cnt1].setVisible(true);
}

必须成为

for (cnt1=0; cnt1<10; cnt1++)
{
    labels1[cnt1].setVisible(true);
}

对于每个循环都是如此。

第二点:我认为这个

for(cnt3=0; cnt1<10; cnt3++)

应该变成

for(cnt3=0; cnt3<10; cnt3++)

0
for (cnt1=0; cnt1<10; cnt1++);
  {
     labels1[cnt1].setVisible(true);
  }

你在第一条语句中放了一个分号。 所以你的循环在没有做任何事情的情况下迭代了10次。 当我们退出循环时,cnt1的值为11。

然后你尝试设置数组的第11个元素 labels1[cnt1].setVisible(true);

由于你可能没有11个元素在数组中,所以你会得到IndexOutofBound错误。 像这样做:

for (cnt1=0; cnt1<10; cnt1++)
  {
     labels1[cnt1].setVisible(true);
  }

0

我看到你的代码中有三个问题:

  • for (cnt1=0; cnt1<10; cnt1++); 以及其他所有行都不应该以分号结尾
  • for (cnt3=0; cnt1<10; cnt3++); 此行中对 cnt1 的引用可能应该改为 cnt3
  • 通常情况下,你应该引用你的 Array 的大小,例如:

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

这样你就可以确保不会引用 Array 超出边界的任何值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接