2013-09-21 4 views
0

Я работаю над простой системой, которая собирает элементы из массива, который выбирается из серии событий кнопок, копирует его в новый массив под названием oneRay и продолжает цикл через его элементы для проверки пользователя на их знание. Если пользователь правильно идентифицирует ответ из запроса, то первый элемент массива 2D в этом разделе становится «», и пропускается с этим кодом:Java Swing Null Pointer Exception do-while

 do{ 
     pick = random.nextInt(oneRay.length); 
    }while(!(oneRay[pick][0].equals(""))); 

который продолжает возвращать вышеупомянутое исключение. Следующий код создает случайный случай в качестве члена данного класса:

Random random = new Random() 

Так что же я могу делать неправильно? Любая помощь будет принята с благодарностью.

UPDATE: Да элементы инициализируются через ряд операторов коммутатора, что прямой собственно выбранный массив oneRay

Отчет об ошибке огромен, как он будет запущен, как я пытаюсь построить качели пользовательский интерфейс, так что Бросают неудачи левые и правый

Вот что я использовал для инициализации:

switch(subject){ 
    case 1: 
     switch(unit){ 
     case 1: oneRay = new String[Master.SciChemArray_IntroductionANDFirstChapter.length][2]; 
      for(int i = 0; (Master.SciChemArray_IntroductionANDFirstChapter.length) > i; i++){ 
       oneRay[i][0] = Master.SciChemArray_IntroductionANDFirstChapter[i][0];oneRay[i][1] = Master.SciChemArray_IntroductionANDFirstChapter[i][1];} 
     default: System.exit(0); break; 
     } break; 
    case 2: 
     switch(unit){ 
     case 1: 
      oneRay = new String[Master.MathaRay_Part2.length][2]; 
      for(int i = 0; (Master.MathaRay_Part2.length) > i; i++){ 
       oneRay[i][0] = Master.MathaRay_Part2[i][0]; oneRay[i][1] = Master.MathaRay_Part2[i][1];} break; 
     default: System.exit(0); break; 
     } break; 

При создании этой установки я прохожу номер, соответствующий предмет и номер блока, которые затем используются для копирования соответствующего массив li ке так ^^

Unit и Subject передаются следующим образом:

  mathstatb1.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent l) { 
      new SwingImplementation(2, 1); 
     }}); 

Причем кнопка посылает от темы 2 и блок 1

А вот ошибки, теперь на дне, если кто-нибудь действительно хочет их:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at wbh.SwingImplementation.<init>(SwingImplementation.java:60) 
at wbh.matstatMenu$1.actionPerformed(matstatMenu.java:23) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
+0

Был ли инициализирован 'oneRay' и его элементы? –

+0

Мне нужно увидеть весь код и весь отчет об исключениях. – tbodt

+0

Это явно не инициализировано, если вы получаете NPE. Отправьте соответствующий код. –

ответ

-1

Было бы более ясно, если вы вставляете весь код. В текущем коде, я вижу следующее может быть бросание NullPointer:

!(oneRay[pick][0].equals("")) 

изменить его

!("".equals(oneRay[pick][0])) 
+0

если oneRay [pick] не инициализирован, это будет по-прежнему NullPointer ... – Sinkingpoint

+1

эти два утверждения одинаковы – redFIVE

+0

нет, они не ... если oneRay [pick] [0] равно null, он будет вызывать нулевой указатель при вызове equals. .. но когда equals вызывается для "", он никогда не будет бросать nullpointer –

0

Try, чтобы убедиться, что все oneRay значения массива являются initalized правильно.

Следующая строка кажется наиболее склонной к NullPointer. Если вы попытаетесь вызвать метод .equals() для null, он выдает NullPointer.

oneRay[pick][0].equals(""); 
+0

Я не могу понять, почему было бы null, но если мой цикл for-loop правильно заполняет массив из массива без нулевых значений; спасибо за вклад. Я дважды проверю свои методы. –

+1

@williambrun. Прикрепите точку останова в своем коде и просмотрите значение или добавьте System.out для сброса значения. Ваше восприятие и реальность не совпадают, и реальность выигрывает ... – MadProgrammer