2013-07-07 2 views
3

Я новичок здесь, на Java. Поэтому моя проблема заключается в том, что я пытаюсь скрыть все компоненты фотографии моего окна и сделать некоторые другие. Но проблема в том, что он всегда бросает Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 10 каждый раз, когда я выбираю элемент, используя JComboBox.ArrayIndexOutofBounds/NullPointerException в Java

Вот код блока для ошибки:

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]; 

и это его назначение в графическом интерфейсе:

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

Я делаю это правильно? Ответы приветствуются. Еще раз. Спасибо.

+0

Ответ будет зависеть от того, что есть в методах labelx []. –

+0

Не должно быть 'cnt3'' для (cnt3 = 0; cnt1 <10; cnt3 ++);'? –

+1

Точка с запятой в первой строке выглядит неправильно. Что находится в ярлыках * -Arrays? – zero0

ответ

2

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

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

+0

Спасибо @Steve P. Я видел и очищал все ошибки. –

+0

@SageTheGreat Это полностью отвечает на ваш вопрос. –

+0

@SageTheGreat Кроме того, поскольку вы новичок, вы должны взять [тур] (http://stackoverflow.com/about). –

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 «s.

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); 
    } 
Смежные вопросы