这是一个排序算法测试文件。我收到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]);
}
}
}
答案 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]);
}