有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Smack 4.1的java XMPP客户端在登录时提供NullPointerException

我试图使用Smack 4.1.0-rc3实现一个java xmpp客户端,该客户端连接到ejabberd xmpp服务器。我使用以下代码连接到服务器

    XMPPTCPConnectionConfiguration connConfig =    XMPPTCPConnectionConfiguration
            .builder()
            .setServiceName("example.com")
            .setHost("192.168.56.101")
            .setPort(5222)
            .setCompressionEnabled(false)
            .setSecurityMode(SecurityMode.disabled)
            .setHostnameVerifier(new HostnameVerifier() {
                public boolean verify(String arg0, SSLSession arg1) {
                    return true;
                }
            })
            .setUsernameAndPassword(user, pass).build();

    connection = new XMPPTCPConnection(connConfig);
    connection.connect();
    connection.login();

在执行“连接”时。login()'我得到以下NullPointerException

Exception in thread "main" java.lang.NullPointerException
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:64)
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:60)
at org.jivesoftware.smack.util.stringencoder.Base64.encodeToString(Base64.java:42)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:199)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:169)
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:236)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.java:365)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:452)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:410)
at org.org.oodlezz.unio.jabber.client.XmppClient.connect(XmppClient.java:88)
at org.org.oodlezz.unio.jabber.client.Client.main(Client.java:32)

我在代码中做错什么了吗?请给我一个正确的例子,用RC4.0点


共 (3) 个答案

  1. # 1 楼答案

    我用的是4.1.0-rc3。就我而言,我没有遇到NPE。这个例子很有效

    以下是pom的一部分。xml

    波姆。xml

    <properties>
        <smack.version>4.1.0-rc3</smack.version>
    </properties>
    ...
    <dependencies>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-core</artifactId>
            <version>${smack.version}</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-tcp</artifactId>
            <version>${smack.version}</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-java7</artifactId>
            <version>${smack.version}</version>
        </dependency>
    ...
    </dependencies>
    ...
    

    一个示例代码就是

    AbstractXMPPConnection conn = new XMPPTCPConnection("xxx", "yyy", "zzz");
    
    conn.connect();
    conn.login();
    
  2. # 2 楼答案

    你的代码还可以,但可能需要正确的依赖项,你可以把它放在你的pom上。xml文件

    <dependencies>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-java7</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-tcp</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-im</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-extensions</artifactId>
            <version>4.1.1</version>
        </dependency>
    </dependencies>
    

    这是基于:https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide

    你可以把你需要的smack版本

    关于maven中的一些最初步骤,如果您不熟悉它,这可能会对您有用:https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

    希望对大家有所帮助

  3. # 3 楼答案

    本页上的其他答案都有部分答案,但尝试一下,我发现真正缺少的是对smack-java7库的依赖。添加此依赖项会导致调用初始值设定项,设置base64encoder,因此此NullPointerException将消失

    在Android上,用smack Android替换smack-java7