2011-02-26 31 views
0

我已經搜索並搜索瞭解決這個問題的方法,但似乎沒有其他人遇到它。這裏有一個描述:Mac上的java.lang.NullPointerException,但不是Windows!

我正在創建一個基於瓷磚的遊戲與一些協程序員。我們使用數據庫類來完成所有文件和圖像的加載。一切都很順利,直到我的Mac突然在我的臉上拋出一個NullPointerException異常。奇怪的是它適用於另一個老兄的Mac(相同型號和所有東西),並且在錯誤出現前幾分鐘我的電腦就能正常工作。在此期間沒有任何變化。

這是以前發生過的,當時我重新安裝了對問題進行排序的操作系統,所以它聽起來像是在Eclipse(我用作IDE)或MacOS中進行調整。任何人有任何想法? https://github.com/Gadamagaska/Quantum-Man

我的堆棧跟蹤:

Exception in thread "main" java.lang.NullPointerException 
    at entities.Level.getTile(Level.java:24) 
    at database.Database.getTile(Database.java:206) 
    at core.FoffyMain.drawBottomTiles(FoffyMain.java:82) 
    at core.FoffyMain.draw(FoffyMain.java:64) 
    at core.Core.gameLoop(Core.java:58) 
    at core.Core.run(Core.java:34) 
    at core.FoffyMain.main(FoffyMain.java:28) 
+0

這意味着層陣列仍然無效,這意味着addLayer從未被調用。也許是比賽條件? – Haakon

+0

哈康是對的;我建議你將邊界檢查和一些日誌記錄添加到你的應用程序 –

+0

我同意,我的猜測是,在多線程下,數據在部分初始化狀態下看到。 –

回答

0

你可以有檢查,這樣

public int getTile(int layer, int x, int y){ 
    if(layers!=null && layers.length > layer && layers[layer].length > y && layers[layer][y].length > x) 
    { 
     return layers[layer][y][x]; 
    } 
    return -1; 
} 

或簡單的手柄空指針異常

public int getTile(int layer, int x, int y) { 
    try{ 

    return layers[layer][y][x]; 
    } 
    catch(NullPointerException npe) 
    { 
     return -1; 
    } 
} 
+0

感謝您的回答,但您必須記住它僅在我的Mac上存在問題。我們在其他Mac和Windows系統上嘗試過,它可以很好地工作 - 但是,檢查可能是我們應該添加的東西! –

0

你確定這只是發生在Mac上

該項目上可以找到?

看看你的代碼,在我看來你的Level類正在試圖在初始化之前訪問圖層成員。

嘗試在Level的構造函數中初始化圖層,而不是addLayer方法,我認爲它應該可以解決問題,或者至少可以解決問題的一部分。

+0

它適用於其他Mac電腦,但我一定會嘗試你的解決方案,看看它是否工作。在約20分鐘內,當我再次在我的筆記本電腦:) –

+0

我標記這是我接受的答案,但似乎我又回到了老問題。不過謝謝你的回答。 –

相關問題