2017-06-29 104 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類中是**。 –