使用ArrayList的Java Nullpointer异常

时间:2014-12-26 12:34:46

标签: java arraylist nullpointerexception

我曾尝试在我的班级中使用ArrayList,但我得到了Nullpointerexception,我真的不知道为什么,这是我的班级:

......

    RawVector vector2;

    **ArrayList<Long> vectorTime;**




    public RawVector CreatingArray(){

        try {


                ArrayList<Float> x = new ArrayList<Float>();
                ArrayList<Float> y = new ArrayList<Float>();
                ArrayList<Float> z = new ArrayList<Float>();
                **ArrayList<Long> tm = new ArrayList<Long>();**
                File n = new File("file.csv");

                FileReader fileReader = new FileReader(n);

                BufferedReader reader = new BufferedReader(fileReader);

                for(String zeile = reader.readLine(); zeile != null; zeile = reader.readLine()){
                    StringTokenizer data = new StringTokenizer(zeile, " ,");

                    **tm.add(Long.parseLong(data.nextToken()));**
                    x.add(Float.parseFloat(data.nextToken()));
                    y.add(Float.parseFloat(data.nextToken()));
                    z.add(Float.parseFloat(data.nextToken()));
                    size++;



                }

                vector2 = new RawVector();
                vector2.setX(x);
                vector2.setY(y);
                vector2.setZ(z);
                vector2.setSize(size);
                vector2.setTime(tm);
                reader.close();
                **this.vectorTime = tm;**


                            }catch (IOException e) {

                e.printStackTrace();
            }

        return vector2;
    }   



    public ArrayList<Long> zeitstempel(){

        return this.vectorTime;
    }


public long getWsize(){

        long wsize;
        ArrayList<Long> timestamp;
        **timestamp = vectorTime;**

        **long SumSamp1 = timestamp.get(0);**
        long SumSamp2 = timestamp.get(vectorTime.size());
        long timespan = SumSamp2 -= SumSamp1;

        long timespanInSec = TimeUnit.MILLISECONDS.toSeconds(timespan);


        wsize = Zeitfenster*vectorTime.size()/timespanInSec;

        return wsize;


    }
    .....

我在方法ArrayList<Long> tm中创建了CreatingArray(),并通过vectorTime将其分配给实例变量this.vectorTime = tm。接下来,我在方法getWize()中使用了此实例变量并将其分配给ArrayList<Long> timestamp,但是一旦编译此代码,您将在代码行long SumSamp1 = timestamp.get(0)中获得NullPointerException。

问题是什么?我非常确定实例变量vectorTime是由this.vectorTime = tm初始化的。但根据例外情况,它并不是我不知道为什么?!

可能我混淆了分配和初始化......

我是Java的新手,因此我认为这种错误通常适用于像我这样的初学者。不过,我希望你们中的任何人都可以提供帮助,并且可以给我一些有用的提示来解决这个问题。

提前感谢您的帮助!!!

最诚挚的问候!

1 个答案:

答案 0 :(得分:0)

首先你确定在getWsize()之前调用CreatingArray()吗?

然后尝试仅使用全局变量vectorTime,而不使用局部变量tm和timestamp。只是为了确保它有效。

//declaring global variable
ArrayList<Long> vectorTime;                         //before
ArrayList<Long> vectorTime = new ArrayList<Long>(); //after

//inside CreatingArray()
ArrayList<Long> tm = new ArrayList<Long>(); //before
vectorTime.clear();                         //after

//inside getWsize
long SumSamp1 = timestamp.get(0); //before
long SumSamp1 = vectorTime.get(0);//after

找到错误后,可以放回那些局部变量。