Java NullPointerError

时间:2014-11-12 03:22:03

标签: java sorting nullpointerexception

这是一个排序算法测试文件。我收到NullPointer错误:

"Exception in thread "main" java.lang.NullPointerException
    at Test.loadFiles(Test.java:28)
    at Test.main(Test.java:39)"

问题似乎是“filecache[x].setName(nameOffiles[x]);” 请指导。感谢。

import java.io.File;
public class Test {
   static File folder = new File("D:\\");
   static File[] listOfFiles = folder.listFiles();
   static String[] nameOffiles = new String[30];
   static long[] sizeOffiles = new long[30];
   static int i = 0;
   static MyFile filecache[] = new MyFile[30];
   public static void readFiles(){
      for (File file : listOfFiles) {
         if (file.isFile()) {
            nameOffiles[i] = file.getName();
            sizeOffiles[i] = file.length();
            i++;
         }
       }
       i = 0;
   }
   public static void loadFiles(){
      for(int x = 0; x <nameOffiles.length; x++){
         filecache[x].setName(nameOffiles[x]);
         filecache[x].setSize(sizeOffiles[x]);
      }
   }
   public static void testFiles(){
      Sorting sort1 = new Sorting();
      sort1.quickSort(filecache);
   }
   public static void main(String[] args) {
      readFiles();  
      loadFiles();
      testFiles();
      for(int x = 0; x < filecache.length; x++){
         System.out.println(filecache[x]);
      }
   }
}

2 个答案:

答案 0 :(得分:2)

您没有初始化filecache数组中的对象,因此NullPointerException。试试这样:

public static void loadFiles() {
    for(int x = 0; x < nameOffiles.length; x++){
        MyFile myFile = new MyFile();
        myFile.setName(nameOffiles[x]);
        myFile.setSize(sizeOffiles[x]);

        filecache[x] = myFile;
    }
}

此外,如果您有超过30个文件,readFiles会抛出ArrayIndexOutOfBoundsException。将数组初始化为与文件数相同的长度,或使用集合类型而不是数组(首选)。

答案 1 :(得分:0)

您的filecache数组可能已经创建了大小为30,但是在您放入内容之前,数组中的每个元素都是null。因此,filecache[0].setName()将抛出空指针异常。

确保在尝试调用方法之前,在数组中的所需索引处添加新的MyFile对象。

for(int x = 0; x <nameOffiles.length; x++){
    if(filecache[x] == null) {
        filecache[x] = new MyFile();
    }
    filecache[x].setName(nameOffiles[x]);
    filecache[x].setSize(sizeOffiles[x]);
}