2017-06-29 68 views
-1

我有一个枚举,我想通过使用foreach遍历它,由于某种原因,它在我的第一个常量上返回null。我没有看到任何错误。Java枚举导致NullPointerException

首先,我创建并初始化一个散列图来存储枚举,以便我可以将它们操纵到我的内心。

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。

+2

首先你的pastebin不能正常工作......其次,你是否也可以显示你的Enum声明? –

+0

发表你的enum代码 –

+0

我做过了,我通过链接节省了空间,哦,哎呀,没有看到pastebin不工作。让我再试一次。 编辑:我得到它的工作。 –

回答

-1

从这个错误消息,我猜你的枚举构造函数中的东西是抛出一个异常。挖掘你的github了一下,我相信问题出在Node。看起来像枚举可能由Java的类加载器初始化,然后在Engine的实例上调用start,导致Engine.getScriptLoader()返回null,而Node的构造函数抛出NullPointerException

+0

没有更多的崩溃!发现[this](https://github.com/AlexCouch/text-game-engine/blob/master/src/org/ggg/engine/io/script/node/Node.java#L22)不应该是那里。感谢您的建议!你是对的,它**在我的Node类中是**。 –