0

в цикле, я хочуAnonymous ActionListener Класс Exception "NullPointerException"

  • инициализации JButtons [] БТС.
  • добавить кнопки на панель pan3.
  • Добавить ActionListener каждому JButton.

вот что я получил до сих пор:

for(int i = 0 ;i < bts1.length ; i++){ 
     bts1[i] = new JButton(""+i); 
     pan3.add(bts1[i]); 
     //The NullPointerException happens after this line . 
     bts[i].addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent ae){ 
       int j = 0 ; 
       screen.setText(screen.getText()+bts[j].getText()); 
       j++; 
      } 
     }); 
    } 

Мой вопрос как решить NullPointerException? примечание для J я добавить его, потому что, когда я пытался использовать I, возникает ошибка компилятора,

+0

J всегда будет равна нулю для SetText материала. Что вы пытаетесь с этим сделать? – user949300

+0

нет, он будет увеличиваться на 1 как j ++, написанный – iShaalan

+1

Тогда он сразу же выпадет из сферы действия и будет забыт. И, в следующий раз в нем будет сброшен на 0. – user949300

ответ

1

Вы инициализируется JButton, как bts1 и назвав его как bts. Я думаю, что это вызвало ошибку.
Кроме того,

Declare int i=0; в глобальный масштаб и for(i = 0 ;i < bts1.length ; i++), то вы можете использовать i вместо j.
Или использовать следующим образом:

for(int i = 0 ;i < bts1.length ; i++){ 
     bts1[i] = new JButton(""+i); 
     pan3.add(bts1[i]); 
     final int j=i; 
     bts1[i].addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent ae){     
       screen.setText(screen.getText()+bts1[j].getText()); 
      } 
     }); 
    } 
+0

с помощью модификатора 'final', чтобы он мог использовать' i', это хорошая точка :) –

+0

Спасибо. Он работает сейчас, вы бы уточнили, почему вы использовали последний модификатор здесь? – iShaalan

+1

Вы можете найти ответ на свой вопрос здесь: http://stackoverflow.com/questions/3910324/why-inner-classes-require-final-outer-instance-variables-java –

0
try this: 
for(int i = 0 ;i < bts1.length-1 ; i++){ 
    //rest of your code 
} 

Как массив из 10 элементов имеет элементы с индексами от 0 до 9, а не от 0 до 10 .

+0

Он не пойдет от 0 до 10 человек !!! – iShaalan

0

Beforr вы добавляете кнопку в панели. Сначала нужно добавить кнопку «прослушиватель».

Попробуйте сначала использовать следующий код.

//The NullPointerException happens after this line . 
    bts[i].addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent ae){ 
      int j = 0 ; 
      screen.setText(screen.getText()+bts[j].getText()); 
      j++; 
     } 
    }); 

    **pan3.add(bts1[i]);** 
+0

Отметив, что вы изменили, не могли бы вы объяснить свою идею – iShaalan

1

Вы используете два различных массивов JButtons, bts и bts1.

  • В вашей петле вы создаете JButton и назначаете его bts1[i].
  • В части ActionListener вы получаете доступ к bts[j].

Вы также инициализировали bts[j]? Если нет, вы столкнетесь с NPE.

1

Попробуйте источник события вместо

screen.setText(screen.getText()+((JButton)ae.getSource()).getText()); 
+0

Я бы понял, что лучше, если вы добавите больше объяснение различий между этими двумя – iShaalan

+0

Вы можете использовать источник события - экземпляр кнопки щелчка. – StanislavL

Смежные вопросы