Java - 在for循环行上发生NullPointerException

时间:2015-12-14 03:21:25

标签: java

我正在学习Java。我有一些代码在哪里 我试图在目录上调用文件名,并使其模型在主

上显示表

代码:

import java.io.File;
import java.util.StringTokenizer;
import javax.swing.table.*;

public class SheetList {    directory
    public static DefaultTableModel load(){
        File file = new File("sheet.");
        File list[] = file.listFiles(); //load file list
        String col[] = new String[2];
        String colNames[] = {"Title", "Artist"};
        DefaultTableModel model = new DefaultTableModel(colNames, 0);
        for(int cnt = 0; cnt < list.length; cnt++){  // ERROR
            String name = list[cnt].getName();            
            if(list[cnt].isFile()){     
                StringTokenizer stok = new StringTokenizer(name, " - ");
                String token = stok.nextToken();          
                col[0] = token;         
                token = stok.nextToken();
                col[1] = token;         
                model.addRow(col);  
            }
        }
        return model;
    }
}

但标记线上出现问题

Thread [main] (Suspended (exception NullPointerException))  
SheetList.load() line: 12   
Main.main(String[]) line: 14    

1 个答案:

答案 0 :(得分:1)

listFiles()可能会返回null并且您无法防范它。如果对象为null,则访问length属性将导致NPE。

在你的循环之前检查文件数组是否为空,你就可以了。

参考:http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles()

要记住的另一件事是,您应该检查您创建的文件是否存在以及它是否是目录。

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#exists()

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#isDirectory()