类的实例导致nullPointerException

时间:2015-04-06 14:37:57

标签: java eclipse excel

我正在Eclipse中使用poi导入Excel 2007文件。我的问题是NullPointerException,但我不知道如何弄清楚它的来源。类Data的实例可能有问题。这是代码:

import java.io.*;
import java.io.*;
import java.util.ArrayList;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.xmlbeans.XmlOptions;

class Data{
    public Data(){};
    public Data(double[] codnt, int ctgr1, int ctgr2) {
    //  super();
        this.codnt = codnt;
        this.ctgr1 = ctgr1;
        this.ctgr2 = ctgr2;
    }
    double codnt[];
    int ctgr1;
    int ctgr2;  
}
class Center{
    public Center(int cycle, Data[] c) {
//      super();
        this.cycle = cycle;
        this.c = c;
    }
    int cycle;
    Data c[];
}
public class KmeansCluster {
    @SuppressWarnings({ "static-access", "null" })
    public static void main(String[] args)throws IOException,InvalidFormatException{
        InputStream is = new FileInputStream(new File("src//artificial_exp1.xlsx"));
        Workbook wb = WorkbookFactory.create(is);
        Sheet sheet = wb.getSheetAt(0);
        ArrayList<Data> list = new ArrayList<Data>();
        int i = 0;
        try {
            for (Row row : sheet) {
                Data dataTemp = new Data();
                // int i = 0;
                int j = 0;
                for (Cell cell : row) {
                    row.getCell(0).setCellType(cell.CELL_TYPE_NUMERIC);
                    dataTemp.codnt[j] = cell.getNumericCellValue(); 
                                  j++;
                    System.out.println("cell.getnumericcellvalue() is " + cell.getNumericCellValue() + "datatemp.condt[j] is " + dataTemp.codnt[j]);
                    System.out.println(" test passed !");
                }
                dataTemp.ctgr1 = (int) dataTemp.codnt[j - 2];
                dataTemp.ctgr2 = (int) dataTemp.codnt[j - 1];
                list.add(dataTemp);
                i++;
            }
            Data data1 = (Data) list.get(0);
            System.out.println(data1.codnt[0]
                    + "    is the content of the first blank.");
        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }

}

1 个答案:

答案 0 :(得分:4)

Data的无参数构造函数使codnt未初始化。您可以通过在通用异常块

中打印堆栈跟踪来找到它