Java ArrayList Java.lang.NullPointerException

Java ArrayList Java.lang.NullPointerException,java,arraylist,static,nullpointerexception,Java,Arraylist,Static,Nullpointerexception,很抱歉,我对编程非常陌生,遇到了我希望能解决的简单问题。 我将把我的代码放在这里,并在下面解释我试图做什么 public class main { static ArrayList<Interpreter> ints1; static ArrayList<Customer> custs1; static MainFunctions mainF; static { //Static blocks execute first - and are great for ini

很抱歉,我对编程非常陌生,遇到了我希望能解决的简单问题。 我将把我的代码放在这里,并在下面解释我试图做什么

public class main {

static ArrayList<Interpreter> ints1;
static ArrayList<Customer> custs1;
static MainFunctions mainF;

static { //Static blocks execute first - and are great for initializing data!
    ArrayListPopulator ALP1 = new ArrayListPopulator();
    ints1 = ALP1.populateALints1(); // error occurs on this method call.
    custs1 = ALP1.populateALcusts1();
    mainF = new MainFunctions(ints1, custs1);
}

public static void main(String[] args) {

    mainF.findNearestInterp("Frank");
}
公共类主{
静态数组列表ints1;
静态数组列表custs1;
静态维护功能维护;

静态{//静态块首先执行-这对于初始化数据非常有用! ArrayListPopulator ALP1=新的ArrayListPopulator(); ints1=ALP1.populateALints1();//此方法调用发生错误。 custs1=ALP1.populateALcusts1(); mainF=新的main函数(ints1、custs1); } 公共静态void main(字符串[]args){ mainF.findNearestInterp(“弗兰克”); }
}

ArrayList填充器:

import java.util.ArrayList;
public class ArrayListPopulator {

private ArrayList<Interpreter> ints1ToGo;
private ArrayList<Customer> custs1ToGo;

public ArrayList<Interpreter> populateALints1() {
    //Format is "String pName, int pAge, String PGender,
            // int pSignLevel, boolean pDeafBlindExp, double pLatitude, double pLongitude, String pTown"

            //Gender must be "Male"||"Female"

            //In future this could be done by scanning a local config text file. Wish that I knew that stuff :l

    Interpreter Elliott = new Interpreter("Elliott", 23, "Male", 6, true, 52.098049, 0.277860, "Linton");
    ints1ToGo.add(Elliott); //error occurs here.

    Interpreter Sarah = new Interpreter("Sarah", 20, "Female", 3, true, 52.209950, 0.137774, "Cambridge");
    ints1ToGo.add(Sarah);

    Interpreter Argibarge = new Interpreter("Argibarge", 42, "Male", 3, false, 52.599199, -0.264226, "Peterborough");
    ints1ToGo.add(Argibarge);

    Interpreter Bruce = new Interpreter("Bruce", 30, "Male", 2, false, 50.717527, -3.540192, "Exeter");
    ints1ToGo.add(Bruce);

    Interpreter Medusa = new Interpreter("Medusa", 1009, "Female", 4, false, 55.867795, -4.267566, "Glasgow");
    ints1ToGo.add(Medusa);

    return ints1ToGo;
}

public ArrayList<Customer> populateALcusts1() {
    //Format is "String pName, int pAge, String PGender,
    //boolean pDeafBlind, double pLatitude, double pLongitude, String pTown"

    //Gender must be "Male"||"Female"

    //In future this could be done by scanning a local config text file. Wish that I knew that stuff :l

    Customer Frank = new Customer("Frank", 30, "Male", false, 56.113482, -3.934635, "Stirling");
    custs1ToGo.add(Frank);

    Customer Eleanor = new Customer("Eleanor", 23, "Female", true, 52.622439, 1.281124, "Norwich");
    custs1ToGo.add(Eleanor);

    Customer Pacha = new Customer("Pacha", 43, "Male", false, 52.397273, -0.727392, "Kettering");
    custs1ToGo.add(Pacha);

    Customer Roy = new Customer("Roy", 69, "Male", false, 51.746940, -1.257345, "Oxford");
    custs1ToGo.add(Roy);

    Customer Jenette = new Customer("Jenette", 16, "Male", false, 51.871877, 0.357845, "Great Dunmow");
    custs1ToGo.add(Jenette);
    return custs1ToGo;
}
import java.util.ArrayList;
公共类arraylistopulator{
私人ArrayList ints1ToGo;
私人ArrayList custs1ToGo;
公共阵列列表populateALints1(){
//格式为“字符串pName,int pAge,字符串PGender,
//int pSignLevel,布尔值pDeafBlindExp,双陈词滥调,双pLongitude,字符串pTown“
//性别必须是“男性”| |“女性”
//将来,这可以通过扫描本地配置文本文件来实现
口译员Elliott=新口译员(“Elliott”,23,“男性”,6,对,52.098049,0.277860,“林顿”);
ints1ToGo.add(Elliott);//此处发生错误。
口译员莎拉=新口译员(“莎拉”,20,“女性”,3,对,52.209950,0.137774,“剑桥”);
ints1ToGo.add(莎拉);
解释器Argibarge=新解释器(“Argibarge”,42,“男性”,3,假,52.599199,-0.264226,“彼得伯勒”);
ints1ToGo.add(Argibarge);
口译员Bruce=新口译员(“Bruce”,30,“男”,2,假,50.717527,-3.540192,“埃克塞特”);
ints1ToGo.add(布鲁斯);
口译员美杜莎=新口译员(“美杜莎”,1009,“女性”,4,假,55.867795,-4.267566,“格拉斯哥”);
ints1ToGo.add(美杜莎);
返回多哥;
}
公共阵列列表populateALcusts1(){
//格式为“字符串pName,int pAge,字符串PGender,
//布尔pDeafBlind,双陈词滥调,双pLongitude,字符串pTown“
//性别必须是“男性”| |“女性”
//将来,这可以通过扫描本地配置文本文件来实现
客户弗兰克=新客户(“弗兰克”,30,“男性”,假,56.113482,-3.934635,“斯特林”);
加上(弗兰克);
客户埃莉诺=新客户(“埃莉诺”,23,“女性”,真实,52.622439,1.281124,“诺维奇”);
加上(埃莉诺);
客户Pacha=新客户(“Pacha”,43,“男性”,假,52.397273,-0.727392,“凯特林”);
加上(帕查);
客户罗伊=新客户(“罗伊”,69,“男性”,假,51.746940,-1.257345,“牛津”);
加上(罗伊);
客户Jenette=新客户(“Jenette”,16,“男性”,假,51.871877,0.357845,“大邓莫”);
加上(杰内特);
返回多哥;
}
}

运行时的错误消息:

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at ArrayListPopulator.populateALints1(ArrayListPopulator.java:16)
at main.<clinit>(main.java:23)
线程“main”java.lang.ExceptionInInitializeError中的异常 原因:java.lang.NullPointerException 位于arraylistopulator.populateALints1(arraylistopulator.java:16) 在main(main.java:23) 在这段代码中,我最不熟悉的是静态{}块,它从存储在ArrayListPopulator类中的数据初始化我的主要ArrayList数据。看起来我没有正确初始化ArrayList,或者正确添加元素,或者没有正确分配引用变量


非常感谢你的帮助

未初始化
ints1ToGo
列表

或者在构造函数中执行此操作:

public ArrayListPopulator() {
    ints1ToGo = new ArrayList<Interpreter>();
}
public arraylistopulator(){
ints1ToGo=newarraylist();
}
或者在尝试添加元素之前

ints1ToGo = new ArrayList<Interpreter>();
Interpreter Elliott = new Interpreter("Elliott", 23, "Male", 6, true, 52.098049, 0.277860, "Linton");
ints1ToGo.add(Elliott); //error won't occur here anymore.
ints1ToGo=newarraylist();
口译员Elliott=新口译员(“Elliott”,23,“男性”,6,对,52.098049,0.277860,“林顿”);
ints1ToGo.add(Elliott)//这里不再发生错误。

请注意,您必须对
custs1ToGo
列表执行相同的操作,因为(正如我所看到的)您没有在任何地方初始化它,而是在
populateALcusts1
方法中使用它。

未初始化
ints1ToGo
列表

或者在构造函数中执行此操作:

public ArrayListPopulator() {
    ints1ToGo = new ArrayList<Interpreter>();
}
public arraylistopulator(){
ints1ToGo=newarraylist();
}
或者在尝试添加元素之前

ints1ToGo = new ArrayList<Interpreter>();
Interpreter Elliott = new Interpreter("Elliott", 23, "Male", 6, true, 52.098049, 0.277860, "Linton");
ints1ToGo.add(Elliott); //error won't occur here anymore.
ints1ToGo=newarraylist();
口译员Elliott=新口译员(“Elliott”,23,“男性”,6,对,52.098049,0.277860,“林顿”);
ints1ToGo.add(Elliott)//这里不再发生错误。

注意您必须对
custs1ToGo
列表执行同样的操作,因为(如我所见)您没有在任何地方初始化它,并且它在
populateALcusts1
方法中使用。

您从未初始化
ints1ToGo

ints1ToGo = new ArrayList<Interpreter>();
ints1ToGo=newarraylist();

您从未初始化
ints1ToGo

ints1ToGo = new ArrayList<Interpreter>();
ints1ToGo=newarraylist();

ints1ToGo
从未初始化。更改
私有数组列表ints1ToGo
to
private ArrayList ints1ToGo=new ArrayList()

ints1ToGo
从未初始化。更改
私有数组列表ints1ToGo
to
private ArrayList ints1ToGo=new ArrayList()

您需要初始化两个阵列实例

private ArrayList<Interpreter> ints1ToGo = new ArrayList<Interperter>();
private ArrayList<Customer> custs1ToGo = new ArrayList<Customer>();
private ArrayList ints1ToGo=new ArrayList();
private ArrayList custs1ToGo=new ArrayList();

您需要初始化两个阵列实例

private ArrayList<Interpreter> ints1ToGo = new ArrayList<Interperter>();
private ArrayList<Customer> custs1ToGo = new ArrayList<Customer>();
private ArrayList ints1ToGo=new ArrayList();
private ArrayList custs1ToGo=new ArrayList();

第16行指的是什么?您是否在任何地方初始化ArrayList集合?“静态块首先执行-非常适合初始化数据”,并且非常适合在单元测试、模拟、控制模块之间的初始化顺序等方面造成困难。请小心使用。我更喜欢用缩写的形式