2014-04-01 46 views
0

這是我的代碼。它認爲配置區域部分= null。配置爲空指針異常

繼承人的代碼:

公共無效loadArenas(){

fc1 = new File(plugin.getDataFolder(), "config.yaml"); 

    if (!fc1.exists()) { 
     try { 
      fc1.createNewFile(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    fc = YamlConfiguration.loadConfiguration(fc1); 

    for (String keys : fc.getConfigurationSection("Arenas.").getKeys(false)) { 

哦,繼承人的錯誤:

Error

+0

一個是行224? – JohnnyAW

+0

'它認爲配置區域部分= null.'如果有NPE,則它是空的。你不應該與JVM爭論,而是找出問題的根源。 – NeplatnyUdaj

+0

我建議你打印出fc的內容或看看你的文件,並驗證該部分是否存在。如果配置文件不存在,則創建一個新配置文件,但我沒有看到任何預填充。所以,如果你創建一個新的,那麼我希望該部分不存在。 – MxyL

回答

1

fc1被初始化,但fc不是。

+0

這一切正常。 Fc是初始化的,但它的「getConfigurationSection」 – user3482764

+0

@ user3482764那麼問題是什麼?如果你知道什麼是null,你爲什麼不修復你的代碼? – JohnnyAW

+0

我在問,因爲我不知道如何解決它。 – user3482764

0

您應該在頂部打印出fc1的內容。很可能您遇到與路徑相關的問題,因此會創建一個新的EMPTY配置文件。

然後,這個新文件被用作fc的輸入,自然也就是「Arenas」。部分不存在。當您嘗試通過getKeys()訪問不存在的部分的密鑰時,NPE將被拋出。無論採用哪種方式,如果您不確定問題出在哪裏,您可以使用調試器對其進行掃描,也可以隨處隨地輸出打印語句,以確定事物是否符合您的期望。

+0

我會嘗試添加默認值:)你可能給我的代碼添加默認值嗎? – user3482764

+0

這並不能解決問題。如果你總是使用默認設置創建一個新的配置文件,那麼這幾乎違背了使用配置文件的目的。 – MxyL

+0

我會嘗試創建默認值,如果這個工作,你已經救了我。 – user3482764