2016-03-06 119 views
0

我得到的2線NPE我評論說:「NPE HERE」空指針異常/陣列

import javax.swing.*; 
import java.awt.*; 
public class Project1{ 
static TextArea preSort, postSort; 
static String[] Array = new String[20]; 


    public static void main(String[] args) { 
    Project1GUI myFrame = new Project1GUI("Project1GUI"); 
    readStringFromFile("filename.txt"); 
    enterFirst(Array); // NPE HERE 
    selectionSort(Array); 
    enterSecond(Array); 

} 
public static void enterFirst (String[] name){ // NPE HERE 
    for(int i=0;i<name.length&&name[i]!=null;i++) 
     preSort.append(name[i]+" "); 
} 
public static void enterSecond (String[] name){ 
    for(int i=0;i<name.length&&name[i]!=null;i++) 
     postSort.append(name[i]+" "); 
} 
public static void selectionSort (String[] name){ 
    for(int i=0; i<name.length-1&&name[i]!=null;i++){ 
     int indexLowest=i; 
     for (int j=i+1; j<name.length&&name[j]!=null;j++) 
      if(name[j]<name[indexLowest]) 
       indexLowest=j; 
     if(name[indexLowest]!=name[i]){ 
      String temp = name[indexLowest]; 
      name[indexLowest]=name[i]; 
      name[i]=temp; 
     }//if 
    }//for 
     }//method selectionSort 

public static boolean isOkay (String name){ 

    char[] chars = name.toCharArray(); 
    for(int i=0; i<chars.length; i++){ 
     if(!Character.isLetter(chars[i])){ 
      return false; 
     } 
    } 
    return true;  
} //isOkay 
public static void readStringFromFile(String fileName){ 
    TextFileInput inFile = new TextFileInput(fileName); 
    String line; 
    line = inFile.readLine(); 
    int index = 0; 
    while (line!=null) { 
     if(isOkay(line))Array[index++]=line; 
     else System.out.println(line); 
     line = inFile.readLine(); 
    }//while 

     inFile.close(); 
} 

} //Project1 

我有另2班在我的目錄,TextFileInput和我的GUI類(做你們需要看那裏的代碼呢?)。 我的代碼中可能有更多的錯誤,不確定,因爲我還不是很熟悉Java,並且正在努力學習。任何其他意見將不勝感激。

無論如何,是什麼造成NPE?根據我的理解,我的字符串數組有空值,當我嘗試訪問名爲[i]的數組時,會導致NPE。 我嘗試用虛擬填充我的數組的其餘部分(字符串值「antinull」),但沒有解決任何問題,並且顯然不是一個優雅的解決方案,即使它是一個。

我只需要有一個project1類和一個GUI類。目標是獲取帶有字符串的文件,檢查字符串是否全是字母,並將實際字詞發送到GUI中的文本區域。然後按大小進行排序並將訂購的版本發送到其他文本區域。不是單詞的字符串被髮送以輸出到控制檯。 Project1應該有一個構造函數,它接受一個字符串參數。

+0

你永遠不會初始化'preSort' ...'preSort.append'拋出一個NullPointerException –

回答

1

當你調用preSort.append(...),你從一個變量(preSort),未初始化調用的方法,從而null,這會導致NullPointerException。例如,如果初始化主要方法中的preSort,情況會更好。

您還應該仔細研究縮進代碼並使用適當的Java命名標準。變量應該是camelCased,而不是以大寫字母開頭。

+0

謝謝,這個固定的NullPointerException異常。完全錯過了。 對不起,有時候我會忘記做它,因爲我一直在做C++,我會確保修復它。 無論如何,我真的很感激你花時間閱讀我的雜亂的代碼,並幫助我。乾杯。 – Daniel

0

我不認爲你在調用enterFirst(Array)時會出現空指針錯誤。由於Array的第一個值爲空,所以循環不應該執行。但是你可能會得到一個空指針錯誤,因爲preSort變量沒有引用任何對象。

嘗試:

static TextArea preSort = new TextArea(5, 20);

static TextArea postSort = new TextArea(5, 20);

+0

謝謝你,第一個答案適合我,但這也有幫助。感謝您的時間和幫助! – Daniel