Java me 在j2me中检索联系人时出现空指针异常

Java me 在j2me中检索联系人时出现空指针异常,java-me,nullpointerexception,jsr75,Java Me,Nullpointerexception,Jsr75,我在检索此联系人代码时遇到问题。函数getContact()正在重新调整null private PIM pim; private ContactList clist; public ContactExtract(){ pim=PIM.getInstance(); try{ clist=(ContactList) pim.openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY); }catch(Exception e){} } p

我在检索此联系人代码时遇到问题。函数getContact()正在重新调整null

private PIM pim;
private ContactList clist;

public ContactExtract(){
    pim=PIM.getInstance();
    try{
    clist=(ContactList) pim.openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY);
    }catch(Exception e){}
}

public Vector getContact(){
    //ContactDetail cd[]= new ContactDetail[200];
    Vector v=new Vector();
    try{
        Enumeration en=clist.items();
        //String num=null;
        //String temp[]=new String[2];
        //int i=0;
        while(en.hasMoreElements()){
            Contact c=(Contact)en.nextElement();
            v.addElement(c);
            //temp=c.getStringArray(Contact.NAME, i);
            //num=c.getString(Contact.TEL, i);
            //cd[i]=new ContactDetail(temp[0],temp[1],num);
        }
        clist.close();
    }catch(Exception e){}
    return v;

始终尝试打印异常e

catch(Exception e)
{
    e.printStackTrace();
}

您将了解代码中的错误。

您得到NPE的最可能原因是
clist
方法中的
getContact
值为null。最可能的原因依次是
ContactExtract()
构造函数中发生的一些异常

但只要你接受例外情况,你就永远无法确定这一点。如果您感兴趣,可以在web上搜索类似JavaSwallow异常的内容,以便更详细地了解为什么这是不好的

同时,找出发生了什么的最直接的方法是在代码中的任何地方添加适当的日志记录,首先是在catch块中。确保没有类似于
catch(Exception e){}
这样的语句,您的奖励将更容易理解哪里出了问题

在构造函数中,将空catch块替换为以下内容:

catch(Exception e){
    Sustem.out.println("exception in openPIMList: [" + e + "]");
}
在getContat方法中,仅使用适当的日志消息执行相同的操作:

catch(Exception e){
    Sustem.out.println("exception in getContact: [" + e + "]");
}
然后,在emulator中重新运行代码,并查看其控制台以找出哪里出了问题

另一件值得在代码中添加的事情是检查、记录和处理可能的空值。在
getContact()
方法中,
clist
可以为null,并会给您带来各种各样的麻烦,但您甚至不尝试检查和处理它