我有这种递归方法:
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);
}
}
}
如果id为0,我试图通过返回null来删除nullpointer,但这不起作用。有没有人有解决方案?
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>
答案 0 :(得分:3)
NullPointerException发生在哪里?那会有所帮助......那就是说:
在你的else子句中,你的
if (id==0) {
没用,因为你在开始时测试它并且id没有改变。
我认为您需要检查是否
getMother(id)
返回null,这可能是你获得NullPointer的地方......但你现在可以确认,不是吗?
答案 1 :(得分:2)
很可能(但很难确认,直到你告诉我们什么线投掷NPE)生成NPE的线是
MyFrame.jta.append(mother.toString() + "\n");
因为母亲是空的。您可以将代码更改为:
Dog mother = getMother(id);
if (mother == null) {
//do something
}
答案 2 :(得分:1)
这里确实没有足够的信息。你得到空指针的是哪一行?
如果我怀疑它在这里:
MyFrame.jta.append(mother.toString() + "\n");
然后你需要通过调试确定它肯定是母是空的。如果你已经这样做了,那么你可以绝对肯定你的getMother(id);对于要传入的id,返回null。
如果我是你,我会为getMother(id)方法创建一个单元测试,并传入导致失败的id。
如果你不知道导致问题的id值是什么,那么至少要坚持一些System.out.print()语句来找出发生了什么。虽然,您最好使用一些日志框架,例如log4j。
希望这有帮助。
答案 3 :(得分:-1)
因为您的例外是mother.toString()
方法..
试试这个
try
{
MyFrame.jta.append(mother.toString() + "\n");
}catch(NullPointerException ignore){}