2015-09-26 57 views
-1

****它抛出的JOptionPane代码的NullPointerException如下。****的NullPointerException在的JOptionPane

public static void main(String[]args){ 


    String[] options={"Do it again?", "Exit"}; 
    int response=0; 
    int indexOfZip; 
    do{ 
     try{ 

     String dataStr=JOptionPane.showInputDialog("Enter a zip code"); 


     if(dataStr!=null){ 
      while (k<i){ 
       if (place[k].equals(dataStr)){ 

       indexOfZip=k; 
        k++; 
       } 

      } 
      int data=Integer.parseInt(dataStr); 
      response=JOptionPane.showOptionDialog(null, 
          "You asked me to search for zip code:"+dataStr+"The zip code "+dataStr+" belongs to"+place[k].getTown()+","+place[k].getState()+"Do you want me to search again?", 
          "results", 

          JOptionPane.YES_NO_OPTION, 
          JOptionPane.QUESTION_MESSAGE, 
          null, 
          options,options[0]); 


      System.out.println("You asked me to search for zip code:"+dataStr); 
      System.out.println("The zip code "+dataStr+" belongs to"+place[k].getTown()+","+place[k].getState()); 
      System.out.println("Do you want me to search again?"); 

     } 


     }catch(NumberFormatException e){ 
     JOptionPane.showMessageDialog(null,"Bad Numeric String, try again.", "Input Error",JOptionPane.ERROR_MESSAGE); 

     } 
    }while(response==0); 
    if (response!=0){ 
     System.out.print("No"); 
     System.out.println("Good Bye!"); 
    } 



    } 

终端说,例外是该行 响应= JOptionPane.showOptionDialog(NULL,

但我看不出这里有什么问题,因为“应答”之前进行初始化。

+0

什么是'place = [k]'?它是否为空?如果不是,它的字段是否为空?发布完整的堆栈跟踪并仔细检查您是否正在查看正确的涉及的行。在**涉及的行之前进行空测试**以查看哪些为null,然后找出原因。 –

+0

@PavelUvarov对不起,我是新来的代码。我应该在哪里申报indexOfZip? – ksdawq

+0

这取决于事实 - 你在哪里使用它。现在它没有用法,所以这个变量可以简单地省略。但根据其他消息来源,我发现一些变量没有被声明,但被使用。例如 - '我'。通常的方式来决定你应该把变量放在哪里 - 决定着两种可见性特征 - 它应该是不够的,但不能超过要求。此外,代码样式定义方法不建议大于10-12行。并且不建议在方法中使用两层以上的嵌套块。我建议你阅读一些代码样式。 –

回答

0

看起来place[k]必须null, 和place[k].getTown()触发器NullPointerException。 在调试器中观察place[k]的值(或添加打印语句)。

+1

你知道吗? 'place [k]'是一个String。 String如何拥有这些方法? –

+0

我们没有看到“place”的声明,所以我们不知道它是什么。如果它是一个字符串,而不是我们正在查看非编译代码并且所有投注都关闭。 – janos

+0

我明白了。我忘了调用地点[k]的方法。现在我的代码变更为如果(地方[K] .getZip()等于(dataStr)。){ \t \t \t \t \t \t \t indexOfZip = K; \t \t \t k ++; \t \t \t}但它仍然有相同的例外... – ksdawq