簡體   English   中英

我可能有一個空指針異常,我只是不知道在哪里

[英]I possibly have a Null Pointer Exception, I just don't know where

我正在制作一個簡單代碼生成器(非隨機),但遇到了問題。 用戶將數據輸入到7個文本字段中。 然后將其內容放入String類型的數組中。 然后,我的代碼獲取該數組,分析不同的元素,並吐出一個可用的代碼(對我來說)。

但是,在嘗試標准化String數組(也就是將每個元素都設置為小寫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);
      }
 }

在某處您已聲明數組如下(可能):

String[] calculationBuffer = new String[size];

它將使用null初始化所有索引。 因此,您將獲得NPE。

在使用數組之前,應按如下所示將所有索引填充到循環中

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

如果要像這樣聲明字符串數組,則String[] calculationBuffer = new String[size];

那么所有的字符串元素都將由Null初始化,因此,如果您不在其他地方的此字符串數組中添加值,則可以像這樣更新代碼

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.
 }

謝謝

您在哪里填充您的CalculationBuffer?

您得到的錯誤指示CalculationBuffer [i]為null,表示您沒有正確填充初始數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM