3

我是Java的初学者。所以我的问题是我试图隐藏窗口的所有照片组件并让其他一些组件出现。但问题是Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 10每次我使用JComboBox.

这是错误的代码块:

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

我做对了吗?答案表示赞赏。再次。谢谢你。

4

4 回答 4

2

您似乎在至少一个for循环中有不正确的变量(正如其他几位海报已经指出的那样)。

尽管如此,您得到 an 的原因ArrayIndexOutOfBoundsException是因为您在所有for循环之后都有分号,从而使它们除了增加您的计数器变量之外什么都不做。您在 for 循环中递增的变量并未在for循环本身中本地声明,因此它们的范围是您当前所在的任何函数(也就是它们存在于 for 循环之外)。因此,当循环完成递增时,您的计数器将太大(在这种情况下为 10)---> 因此ArrayIndexOutOfBoundsException: 10.

于 2013-07-07T09:22:29.127 回答
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++)
于 2013-07-07T09:26:10.867 回答
0
for (cnt1=0; cnt1<10; cnt1++);
  {
     labels1[cnt1].setVisible(true);
  }

您在第一条语句中放置了分号。所以你的循环是迭代 10 次而不做任何事情。当我们退出循环时,值 cnt1 是 11。

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

由于数组中可能没有 11 个元素,因此您将获得 IndexOutofBound。这样做:

for (cnt1=0; cnt1<10; cnt1++)
  {
     labels1[cnt1].setVisible(true);
  }
于 2013-07-07T09:27:48.780 回答
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' 界限的值。

于 2013-07-07T09:25:39.637 回答