NullPointerExceprion при рекурсивном методе - PullRequest
0 голосов
/ 28 марта 2012

У меня есть этот рекурсивный метод:

 public Hund getMor(int id) {
    Hund barn = getHund(id);
    int idMor = barn.getId_mor();
    Hund mor = getHund(idMor);

    return mor;
}

public String getMorTre(int id) {
    if (id == 0) {
        return null;
    }
    if (!existHund(id)) {
        return "Hunden du søkte etter finnes ikke";
    } else {
        if (id == 0) {
            return null;
        } else {
            Hund mor = getMor(id);
            MinRamme.jta.append(mor.toString() + "\n");
            int morId = mor.getId();
            return getMorTre(morId);
        }

    }
}

Я пытался удалить нулевой указатель, возвращая ноль, если идентификатор равен 0, но это не работает.У кого-нибудь есть решение?

NPE:

Exception in thread "AWT-EventQueue -0" java.lang.nullpointerexception
at Arkiv.getMorTre(Arkiv.java:209)
at Arkiv.getMorTre(Arkiv.java:211)
at Arkiv.getMorTre(Arkiv.java:211)
at MinRamme$4.actionPerformed(MinRamme.java:89) <37 internal calls>

Ответы [ 4 ]

3 голосов
/ 28 марта 2012

Где возникает исключение NullPointerException?Это помогло бы ... Как говорится:

В вашем предложении else ваш

if (id==0) {

бесполезен, так как вы проверяете это в начале, а идентификатор не изменяется.

Я думаю, вам нужно проверить, возвращает ли

getMother(id) 

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

2 голосов
/ 28 марта 2012

Вероятно (но трудно подтвердить, пока вы не сообщите нам, какая линия выбрасывает NPE), что строка, которая генерирует NPE, равна

MyFrame.jta.append(mother.toString() + "\n");

потому что мама ноль. Вы можете изменить свой код на это:

Dog mother = getMother(id);
if (mother == null) {
    //do something
}
1 голос
/ 28 марта 2012

Здесь действительно недостаточно информации.На какую строку вы получаете нулевой указатель?

, если, как я подозреваю, он здесь:

MyFrame.jta.append(mother.toString() + "\n");

Затем, с помощью отладки, вы должны определить, что это определенно мать это ноль.Если вы это сделали, то можете быть абсолютно уверены, что ваш getMother (id);возвращает нулевое значение для идентификатора, который вы передаете.

На вашем месте я создал бы модульный тест для метода getMother (id) и передал бы идентификатор, который вызывает ошибку.

Если вы не знаете, какое значение идентификатора вызывает проблему, то по крайней мере придерживайтесь некоторого выражения System.out.print (), чтобы выяснить, что происходит.Хотя вам лучше использовать некоторые каркасы журналирования, такие как log4j.

Надеюсь, это поможет.

0 голосов
/ 28 марта 2012

Это потому, что ваше исключение - mother.toString() метод ..

попробуйте это

try
{
 MyFrame.jta.append(mother.toString() + "\n");
}catch(NullPointerException ignore){}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...