2013-01-24 26 views
0

我正在做一個簡單的代碼生成器(非隨機),我遇到了問題。用戶將數據輸入到7個文本字段中;然後將其內容放入String類型的數組中。然後,我的代碼接受該數組,分析不同的元素,並吐出一個可用的代碼(由我)。我可能有一個空指針異常,我只是不知道在哪裏

但是,在我嘗試將字符串數組標準化(也就是使每個元素都爲小寫字符串)時,它會導致整個程序停止工作,並且我看到空指針異常。

我的具體錯誤信息是這樣的:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at inventorycodeconverter.codeDisplay.calculateData(codeDisplay.java:48) 
    at inventorycodeconverter.InventoryCodeConverterView.button1ActionPerformed(InventoryCodeConverterView.java:315) 
    at inventorycodeconverter.InventoryCodeConverterView.access$900(InventoryCodeConverterView.java:23) 
    at inventorycodeconverter.InventoryCodeConverterView$5.actionPerformed(InventoryCodeConverterView.java:211) 
    at java.awt.Button.processActionEvent(Button.java:392) 
    at java.awt.Button.processEvent(Button.java:360) 
    at java.awt.Component.dispatchEventImpl(Component.java:4630) 
    at java.awt.Component.dispatchEvent(Component.java:4460) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

的代碼,似乎給人的麻煩是款都按這樣的:

public void calculateData(){ 

    int i; 
    for (i = 0; i < calculationBuffer.length; i++){ // calculationBuffer is defined and initialized elsewhere. 

     calculationBuffer[i] = calculationBuffer[i].toLowerCase();// this is line 48 where the first error appears to be. 
    } 


    if (calculationBuffer[0].equals("cap")){ 
      displayBuffer[0] = "CAP"; // displayBuffer is defined and initialized elsewhere. 
    } 
    else { 
     displayBuffer[0] = "#Error#"; 
    } 


    if (calculationBuffer[1].equals("20/400")) { 
      theTA.append("B"); 
    } 
    else if (calculationBuffer[1].equals("20/410")){ 
      displayBuffer[1] = "C"; 
    } 
    else if (calculationBuffer[1].equals("24/410")){ 
     displayBuffer[1] = "F"; 
    } 
    else if (calculationBuffer[1].equals("24/415")) { 
     displayBuffer[1] = "Y"; 
    } 
    else if (calculationBuffer[1].equals("28/400")){ 
     displayBuffer[1] = "H"; 
    } 
    else if (calculationBuffer[1].equals("28/415")) { 
     displayBuffer[1] = "X"; 
    } 
    else if (calculationBuffer[1].equals("28/410")) { 
     displayBuffer[1] = "I"; 
    } 
    else if (calculationBuffer[1].equals("33/400")) { 
     displayBuffer[1] = "J"; 
    } 
    else if (calculationBuffer[1].equals("38/400")) { 
     displayBuffer[1] = "K"; 
    } 
    else if (calculationBuffer[1].equals("43/400")) { 
     displayBuffer[1] = "M"; 
    } 
    else if (calculationBuffer[1].equals("45/400")) { 
     displayBuffer[1] = "N"; 
    } 
    else if (calculationBuffer[1].equals("58/400")) { 
     displayBuffer[1] = "Q"; 
    } 
    else if (calculationBuffer[1].equals("70/400")) { 
     displayBuffer[1] = "S"; 
    } 
    else if (calculationBuffer[1].equals("89/400")) { 
     displayBuffer[1] = "T"; 
    } 

} 


public void displayData() { 
     String displayString; 
     displayString = Arrays.toString(displayBuffer); 
     StringTokenizer st = new StringTokenizer(displayString, ","); 

     while(st.hasMoreTokens()){ 
      String finalText = st.nextToken(); 

      theTA.append(finalText); 
     } 
} 
+1

請參閱調試在發生錯誤時計算緩衝區[i]的內容是什麼。 – svlada

回答

4

某處你有如下(可能)宣佈你數組。因此你正在獲得NPE。

如果您在聲明字符串數組這樣String[] calculationBuffer = new String[size];

那麼所有字符串元素應填寫所有的索引在一個循環如下,使用陣列

for(int i=0; i<size; i++) 
{ 
    calculationBuffer[i] = "A String"; 
} 
0

你在哪裏填寫您calculationBuffer?

您得到的錯誤表明calculateBuffer [i]爲null意味着您沒有正確填充您的初始數組。

String[] calculationBuffer = new String[size]; 

它會intialize各項指標與null S:

2

之前由空初始化,如果你不在這個字符串數組中增加值,那麼你可以像這樣更新你的代碼

for (i = 0; i < calculationBuffer.length; i++){ 
     **calculationBuffer[i]="";** 
    calculationBuffer[i] = calculationBuffer[i].toLowerCase();// this is line 48 where the first error appears to be. 
} 

Thanks

相關問題