ArrayIndexOutofBounds / NullPointerException в 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);
        }
Не могли бы вы сказать мне, в чем здесь проблема? Я опубликую весь код, если вы попросите об этом. Заранее спасибо.

Edit : я исправил ошибки в моем массиве, но на этот раз,. компилятор выдал мне такую ошибку:

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

Кстати, это фрагмент объявления my arrays:

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 3

4 ответа:

Похоже, что у вас есть неправильные переменные по крайней мере в одном из ваших циклов for (как уже указывалось в нескольких других постерах).

Тем не менее, причина, по которой вы получаете ArrayIndexOutOfBoundsException, заключается в том, что у вас есть точки с запятой после всех ваших циклов for, тем самым заставляя их ничего не делать, кроме увеличения ваших переменных счетчика. Переменные, которые вы увеличиваете в циклах for, не объявляются локально в самих циклах for, поэтому их область действия-это любая функция, которую вы используете в настоящее время (иначе они существуют вне циклов). Поэтому, когда циклы закончат инкрементировать, ваши счетчики будут слишком большими (в этом случае 10)---> отсюда ArrayIndexOutOfBoundsException: 10.

Во-первых, у вас есть точка с запятой после каждого оператора 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++)
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);
  }

Я вижу три вещи, которые, кажется, не работают в вашем коде:

  • for (cnt1=0; cnt1<10; cnt1++); и все остальные строки не должны заканчиваться точкой с запятой
  • for (cnt3=0; cnt1<10; cnt3++); Ссылка на cnt1 в этой строке, вероятно, должна быть cnt3
  • В общем случае вы должны ссылаться на размер вашего Array, например:

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

Таким образом, вы уверены, что не будете ссылаться на какое-либо значение вне границ Array.