2010-02-24 6 views
2

Это может быть немного нетрадиционный способ обратиться за помощью, но мой код работает с ошибками выполнения нулевого указателя, но область выполнения ошибки слишком велика для публикации в stackoverflow. Я действительно хочу понять это, так что было бы возможно, чтобы я отправил по электронной почте один из вас мой код, чтобы выяснить, что не так? Я знаю, что ошибки времени выполнения указывают на конкретный номер строки, с которой он работает, но я, честно говоря, не могу сделать головы или хвосты, почему это происходит там. Большое спасибо!!Ошибка выполнения Java: исключение null-указателя

Стек след:

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

Просто отправьте код. Публикуя свою проблему публично и имея решения прямо под ней, вы могли бы дать представление о других в будущем. –

+2

** и stacktrace тоже ** – flybywire

+0

это охватывает несколько разных файлов, и было бы чрезвычайно сложно сделать это, так как это более 5000 строк кода. Тем не менее, я думаю, что это легкое решение для опытных пользователей и должно занимать менее 5 минут. – dukevin

ответ

9

Ваш комментарий:

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

Потому что это в верхней части трассировки стека, это означает, что randOccupants поле равно нулю в то время этот метод является называется.

Кроме того, если вы получаете еще один NPE по адресу addRandomOccupant, эта же коллекция, вероятно, тоже не указана. Вероятно, вы просто забыли построить коллекцию.

+0

благодарит вас за помощь. Но что вы подразумеваете под словом «забыл построить коллекцию». – dukevin

+1

@Kevin: Я предполагаю, что класс 'Maze' имеет поле, представляющее« коллекцию »обитателей. Что-то вроде 'private List randOccupants;'. Я думаю, что вы объявили поле, но забыли инициализировать его экземпляром надлежащей коллекции, то есть 'private List randOccupants = new ArrayList ();'. Вы также можете построить коллекцию в конструкторе для 'Maze'. –

+0

WOW! Это на самом деле! Благодаря!! Я бы выслал вам по электронной почте 10 долларов, если это было возможно ... – dukevin

Смежные вопросы