2015-09-26 27 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