ldap连接的java程序中的NullPointerException

ldap连接的java程序中的NullPointerException,java,nullpointerexception,Java,Nullpointerexception,运行程序时获取NullPointer异常。请帮忙 代码如下: import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDi

运行程序时获取NullPointer异常。请帮忙

代码如下:

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;

public class LdapTest {

    public static void main(String[] args) throws Exception
    {

        final String PROVIDER_URL = "http://localhost:1389/dc=vysbank,dc=com";  //Enter LDAP URL here

        final Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,    "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, PROVIDER_URL);

        try {

            DirContext ctx = new InitialDirContext(env);

            String filter = "(uid=1234)"; // Enter User ID here.
            String[] attrIDs = {"uid","cn","mail"}; // Enter list of attributes to retrieve from LDAP here

            SearchControls ctls = new SearchControls();
            ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
            ctls.setReturningAttributes(attrIDs);

            NamingEnumeration answer = ctx.search("ou=People", filter, ctls);

            SearchResult searchResult = null;
            String cn=null;
            String uid=null;
            String mail=null;

            while (answer.hasMore()) {

                searchResult = (SearchResult) answer.next();
                Attributes attr = searchResult.getAttributes();
                cn=attr.get("cn").get(0).toString();
                uid=attr.get("uid").get(0).toString();
                mail=attr.get("mail").get(0).toString();

                System.out.println("Name: "+cn);
                System.out.println("User ID: "+uid);
                System.out.println("E-mail Address: "+mail);

            }

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

    }

}
当应用程序在需要对象的情况下尝试使用null时抛出

下面的代码段抛出NPE,因为您正在对未正确初始化的字符串a调用方法

     String a = null;
     a.toString();

调试您的代码以找到这种情况。

您可能有
null
指针:

searchResult = (SearchResult) answer.next();
Attributes attr = searchResult.getAttributes();
cn=attr.get("cn").get(0).toString();
uid=attr.get("uid").get(0).toString();
mail=attr.get("mail").get(0).toString();
我将执行
null
指针检查,查看是否有任何值为null,如果是,则给出默认的空字符串值:

if(attr != null){   
    if(attr.get("cn") != null && attr.get("cn").get(0) != null)
        cn=attr.get("cn").get(0).toString();
    else
        cn = "";
    if(attr.get("uid") != null && attr.get("cn").get(0) != null)
        uid=attr.get("uid").get(0).toString();
    else
        uid = "";
    if(attr.get("mail") != null && attr.get("cn").get(0) != null)
        mail=attr.get("mail").get(0).toString();
    else
        mail = "";
}

然而,这一切都取决于代码的目标。如果您从前端(例如网页)接收值,则应始终将其设置为空或
null
检查。如果您正在创建变量并计划使用它们,请确保这些变量在使用它们时包含值。

请发布正确的错误消息。NPE在哪一行?发布堆栈跟踪,空指针在哪里,样本输入,预期输出和代码目标。我还得到LdapTest.java使用未检查或不安全的操作。注意:使用-Xlint重新编译:未选中以获取详细信息。原因可能是什么?在上面的代码中,如何使用cn=目录管理器连接到ldap?它不允许我获取o中所有用户的属性=People@user3150734您可能想发布另一个问题,因为这似乎是另一个问题|=^/