2016-03-06 113 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