使用weka时java中的NullPointerException

时间:2015-09-29 07:56:38

标签: java nullpointerexception weka

当我尝试使用weka API进行分箱时,除非在Debug注释块中写入,否则它总是会出现NullPointerException。 有人能为我解释一下吗?我是JAVA的新手,已经阅读了文档,但仍然无法弄明白。

这是我的测试pj:

public static void main(String[] args) throws Exception{

        Scanner _input = new Scanner(System.in);
        String path = "";

        System.out.print("Input data path: ");
        path = _input.nextLine();

        /*Init data source*/
        DataSource source = new DataSource(path);
        Instances data = source.getDataSet();

        /*if (data.classIndex() == -1)
               data.setClassIndex(data.numAttributes() - 1);*/

        /*Debug section*/ //THIS SECTION WORKS FINE

        /*Discretize _dis = new Discretize();
        _dis.setInputFormat(data);
        _dis.setBins(10);
        data = Filter.useFilter(data, _dis);
        System.out.print(data.firstInstance());
        System.exit(2);*/


                    System.out.println("Select sub function: \n"
                                + "1. Equal-width\n"
                                + "2. Equal-depth\n");
                    System.out.print("Input selection: ");
                    int select = _input.nextInt();


                    Discretize _dis = new Discretize();
                    _dis.setInputFormat(data);
                    _dis.setAttributeIndices("first-last");


                    if (select == 1) {
                        _dis.setBins(_input.nextInt());
                    }
                    else {
                        _dis.setDesiredWeightOfInstancesPerInterval(_input.nextDouble());
                        _dis.setUseEqualFrequency(true);
                    }

                    data = Filter.useFilter(data, _dis); //NULL POINTER EXCEPTION HERE
                    System.out.print(data.firstInstance());

    }

1 个答案:

答案 0 :(得分:0)

每当您尝试访问某个对象方法或字段但对象为null或尚未初始化时,都会发生NullPointerException。在您的具体情况下,我认为您在评论之后会在行中获得NullPointerException。只需你的指示:

data = Filter,useFilter(data, _dis);

返回空数据(null)和下一行:

是System.out.print(data.firstInstance());

正在尝试打印数据(或null)firstInstance,这里是异常发生的地方。

要解决此问题,只需在此之前添加控件:

data = Filter.useFilter(data, _dis);
if(data!=null)System.out.print(data.firstInstance());
else System.out.println("Empty data.");