Как я могу узнать, где возникло исключение Null Pointer? - PullRequest
3 голосов
/ 13 апреля 2010

У меня была проблема при создании приложения для Blackberry. Я нашел парня, который сделал учебник, который сделал то, что я пытался с моим. Я скопировал код приложения учебника, чтобы попытаться воссоздать его, просто чтобы увидеть его в действии. Результат: исключение нулевого указателя.

Я хочу знать, что вызывает это. Как я могу?

Ответы [ 7 ]

3 голосов
/ 13 апреля 2010

Вы можете просмотреть трассировку стека, если поймаете Throwable вместо перехвата Exception или любого подкласса Exception. например,

try
{
   //some code
}
catch(Throwable t)
{
    //Will automatically show a stacktrace in eclipse.  
    //I believe on a real device it will put the stacktrace in the eventlog.  
}
2 голосов
/ 15 апреля 2010

Хорошо, я не могу взять кредит на себя, но эта ветка, кажется, дает ответ.

Измените свой блок catch, чтобы он ловил Throwable вместо определенного исключения. Это сохранит трассировку стека и добавит ее в журнал событий.

http://supportforums.blackberry.com/t5/Java-Development/How-to-get-stacktrace-from-a-real-device/m-p/27668

Кроме того, попробуйте запустить приложение на симуляторе смартфона BlackBerry, а не на реальном телефоне, поскольку Blackberry указывает в их документации, что вы можете вызвать функцию printStackTrace.

2 голосов
/ 13 апреля 2010

В BlackBerry нет трассировки стека, лучше всего использовать режим отладки, поэтому приложение будет break при возникновении исключения.

Люди предложили это

try {
    // Code that throws an exception
} catch (Exception e) {
    e.printStackTrace();
}

Что не будет работать на BlackBerry, вам нужно будет использовать это вместо

System.out.println(e.getMessage());

Но поскольку он показывает только исключение, он не даст вам строку, где произошла ошибка, вам придется добавить другую информацию в println.

На реальном устройстве вы можете получить доступ к StackTrace, выполнив this :

Перейдите на начальный экран и введите последовательность задних дверей LGLG. Затем вы фильтруете журнал и находите запись об исключении. Затем вы можете скопировать и отправить трассировку по электронной почте.

Лучшее, что я мог найти на сайте RIM, это документ .

0 голосов
/ 14 апреля 2010

найти создателя NPE легко в ежевике.Например,

1.Введите этот код в любом месте.

String temp = null;temp.length ();

запустить симулятор в режиме отладки из eclipse. при достижении этого кода eclipse автоматически приостанавливает выполнение кода и temp.length (); эта строка будет выделена зеленым цветом. в окне отладки вы можете увидеть исключение приостановленного нулевого указателя исключения.
0 голосов
/ 13 апреля 2010

Посмотрите на трассировку стека при сбое программы. Он сообщит вам, где (и обычно какая строка кода, если она доступна) возникла исключительная ситуация, а также какой объект был нулевым.

Если вы не видите трассировку стека, окружите все в основном методе тем, что OMG Unicorns предлагает .

0 голосов
/ 13 апреля 2010

Вы должны увидеть трассировку стека исключения.

Вы можете распечатать это на консоли, выполнив что-то вроде этого:

try {
    // Code that throws an exception
} catch (Exception e) {
    e.printStackTrace();
}

Примечание: это НИКОГДА не должно появляться в рабочем коде!

0 голосов
/ 13 апреля 2010

Я не знаю о Blackberry, но, как правило, исключения имеют трассировку стека, где отображаются номера строк:

java.lang.NullPointerException
    at your.packege.ClassName.methodName(ClassName.java:169)

Итак, найдите трассировку стека и посмотрите. Трассировка стека получается либо

try {..} catch (Exception ex) {..}

или позволяя ему пузыриться до места, где он печатается на стандартный вывод.

Кроме того, каждое исключение имеет метод getStackTrace(), который возвращает каждую строку трассировки стека как StackTraceElement

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...