2013-09-21 37 views
0

我正在从一个简单的系统收集数组中的元素,通过一系列按钮事件选择它,将其复制到一个名为'oneRay'的新数组中,并继续循环元素来测试用户的知识。如果用户正确地从一个提示标识一个答案,该部分中的2D阵列的第一个元素变为“”,并且将被跳过,此代码:Java Swing空指针异常做 - 而

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

哪个继续返回上述异常。下面的代码创建随机所讨论的类的成员:

Random random = new Random() 

但是,是什么我是做错了什么? 任何帮助将不胜感激。

UPDATE:是的元素通过一系列的开关语句是直接适当的选择阵列oneRay初始化

错误报告是巨大的,因为它为我试图建立摆动UI启动,所以它扔左,右失败

这里是我用来初始化:

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; 

在创建这个设置我通过一些对应主题和单元编号,然后将其用于复制有关阵列李柯所以^^

单元和主体被传递像这样:

  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

如果你粘贴整个代码会更清楚。在当前的代码,我看到下面的可能抛出一个空指针:

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

将其更改为

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

如果oneRay [pick]没有初始化,这仍然是NullPointer ... – Sinkingpoint

+1

这两个语句是相同的 – redFIVE

+0

不,他们不是..如果oneRay [pick] [0]为null,它将在调用equals时抛出一个空指针。 ..但是当等于“”它将永远不会抛出空指针 –

0

试图确保所有oneRay数组值的正确initalized。

下面一行似乎最适合NullPointer。如果您尝试为null调用.equals()方法,则会抛出NullPointer。

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

我看不出为什么会有空,但如果我的for循环从没有null-s的数组中正确填充所有数据;感谢您的贡献我将仔细检查我的方法 –

+1

@williambrun在代码中附加一个断点并检查值或添加一个System.out以转储该值。你的看法和现实不匹配,现实正在赢得... – MadProgrammer