Java Enum导致NullPointerException

时间:2017-06-29 00:21:00

标签: java enums nullpointerexception

我有一个枚举,我试图使用foreach迭代它,并且由于某种原因它在我的第一个常量上返回null。我认为没有错。

首先,我正在创建并初始化一个hashmap来存储枚举,以便我可以将它们操作到我心中。

public class ScriptLoader {
    private ResourceLocation resloc;
    private File file;
    private FileReader fr;
    private BufferedReader br;
    //Here
    private Map<String, Node> nodes;

初始于此:

 public void loadScript() throws IOException{
        file = resloc.getFile();
        fr = new FileReader(file);
        br = new BufferedReader(fr);
        //Here
        nodes = new HashMap<>();
        this.setNodes();
        if(Engine.stateOfEngine == EnumEngineState.DEBUGGER_ON) {
            Engine.LOGGER.log("\tScript Loaded!", EnumLoggerTypes.DEBUG);
        }
    }

其次,我正在创建一个名为setNodes()的方法,该方法将常量添加到setNodes()的父类中的地图,称为ScriptLoader

public void setNodes(){
        for(EnumNodes node : EnumNodes.values()) {
            nodes.put(node.getName(), node.getNode());
        }
    }

我在这里称呼它:

public void loadScript() throws IOException{
        file = resloc.getFile();
        fr = new FileReader(file);
        br = new BufferedReader(fr);
        nodes = new HashMap<>();
        this.setNodes();
        if(Engine.stateOfEngine == EnumEngineState.DEBUGGER_ON) {
            Engine.LOGGER.log("\tScript Loaded!", EnumLoggerTypes.DEBUG);
        }
    }

现在,我有一个enum我有一个我想要迭代的“节点”列表,可以在setNodes()方法中看到。

现在崩溃报告为here。出于某种原因,它将ExceptionInInitializationError指向第一个枚举常量,并将空指针异常指向枚举声明。我不认为枚举声明可以返回null。

1 个答案:

答案 0 :(得分:-1)

从错误消息中,我猜你的枚举构造函数中的某些内容正在抛出异常。通过你的github挖掘一下,我相信问题出在Node。看起来在Engine的实例上调用start之前,Java的类加载器可能会初始化枚举,导致Engine.getScriptLoader()返回null,并且Node的构造函数将被抛出NullPointerException