2010-02-24 29 views
2

這可能是一種尋求幫助的小傳統方式,但是我的代碼正在運行到空指針運行時錯誤中,但運行時錯誤的範圍太大而無法傳遞到stackoverflow。我真的很想弄明白這一點,所以我可以通過電子郵件向我們發送一封電子郵件,瞭解哪些問題?我知道運行時錯誤告訴它正在跳動的特定線路號,但我真的無法制定正面或反面爲什麼它發生在那裏。非常感謝你!!Java運行時錯誤:空指針異常

堆棧跟蹤:

java.lang.NullPointerException 
    at Maze.getNumRandOccupants(Maze.java:118) 
    at P4TestDriver.testMaze(P4TestDriver.java:995) 
    at P4TestDriver.main(P4TestDriver.java:116) 
    at __SHELL8.run(__SHELL8.java:7) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at bluej.runtime.ExecServer$3.run(ExecServer.java:814) 
java.lang.NullPointerException 
    at Maze.addRandomOccupant(Maze.java:130) 
    at P4TestDriver.testMazeReadWrite(P4TestDriver.java:1071) 
    at P4TestDriver.main(P4TestDriver.java:127) 
    at __SHELL8.run(__SHELL8.java:7) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at bluej.runtime.ExecServer$3.run(ExecServer.java:814) 
+1

只需發佈代碼。通過公開發布您的問題,並將解決方案置於其下方,您可能可以在將來爲其他人提供洞察力。 – 2010-02-24 07:12:52

+2

**和堆棧跟蹤** – flybywire 2010-02-24 07:14:45

+0

這跨越了幾個不同的文件,並且因爲它超過5000行代碼,所以這樣做是非常困難的。不過,我認爲這對於有經驗的用戶來說是一個簡單的修復方法,應該少於5分鐘。 – dukevin 2010-02-24 07:14:59

回答

9

從您的評論:

public int getNumRandOccupants() { return randOccupants.size(); } 

因爲這是你的堆棧跟蹤的頂部,這意味着randOccupants字段爲空的時候這種方法調用。

此外,如果您在addRandomOccupant處獲得另一個NPE,則同樣的集合也可能爲null。您可能已經忘記構建集合。

+0

感謝您的幫助。但是,「忘記構建集合」意味着什麼。 – dukevin 2010-02-24 07:27:42

+1

@Kevin:我認爲'Maze'類有一個代表佔用者「集合」的字段。像'private List randOccupants;'。我認爲你已經聲明瞭該字段,但忘記將其初始化爲適當集合的一個實例,即'private List randOccupants = new ArrayList ();'。你也可以在'Maze'的構造函數中構造集合。 – 2010-02-24 07:30:11

+0

哇!這實際上做到了!謝謝!!如果可能的話,我會給你發10美元的電子郵件給你... – dukevin 2010-02-24 07:39:13