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 ответа:
Похоже, что у вас есть неправильные переменные по крайней мере в одном из ваших циклов
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
.