首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.lang.NoClassDefFoundError:解析失败: Ljavax/naming/directory/InitialDirContext;

java.lang.NoClassDefFoundError:解析失败: Ljavax/naming/directory/InitialDirContext;
EN

Stack Overflow用户
提问于 2015-11-10 05:16:24
回答 3查看 3.3K关注 0票数 3

我正在尝试使用android studio中的Smack库构建一个带有XMPP协议的聊天应用程序。通过使用Smack版本3.1.0,我可以很容易地连接到open fire服务器,甚至我发送了一条消息给由spark登录的用户。但是我从来没有收到过来自该用户的消息,因为MessageListener的processMessage在编译中只运行了一次。因为我不能得到最喜欢的结果,所以我在互联网上搜索了一下,发现4.1或更高版本的smack只支持android。

所以我试着用smack 4.1.4来构建我的应用,并解决了很多错误。但是有一个错误没有解决,我在互联网上找不到它。仅此而已(当然还有更多的错误,但我带来了前4个错误):

代码语言:javascript
复制
11-10 00:16:03.446 15512-15539/xmppconnectiontest2.ffisher.com.xmpp2  E/AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/naming/directory/InitialDirContext;
11-10 00:41:36.169 19859-19886/xmppconnectiontest2.ffisher.com.xmpp2 E/AndroidRuntime:     at org.jivesoftware.smack.util.dns.javax.JavaxResolver.<clinit>(JavaxResolver.java:50)
11-10 00:41:36.169 19859-19886/xmppconnectiontest2.ffisher.com.xmpp2 E/AndroidRuntime:     at java.lang.Class.classForName(Native Method)
11-10 00:41:36.169 19859-19886/xmppconnectiontest2.ffisher.com.xmpp2 E/AndroidRuntime:     at java.lang.Class.forName(Class.java:308)

正如igniterealtime的文档所说,我添加了所有必要的库。这是我在Gradle中的依赖项:

代码语言:javascript
复制
compile 'org.igniterealtime.smack:smack-core:4.1.4'
compile 'org.igniterealtime.smack:smack-tcp:4.1.4'
compile 'org.igniterealtime.smack:smack-extensions:4.1.4'
compile 'org.igniterealtime.smack:smack-resolver-javax:4.1.4'
compile 'org.igniterealtime.smack:smack-bosh:4.1.4'
compile 'org.igniterealtime.smack:smack-resolver-dnsjava:4.1.4'
compile 'org.igniterealtime.smack:smack-legacy:4.1.4'
compile 'org.igniterealtime.smack:smack-experimental:4.1.4'
compile 'org.igniterealtime.smack:smack-jingle-old:4.1.4'
compile 'org.igniterealtime.smack:smack-debug:4.1.4'

主要活动onCreate:

代码语言:javascript
复制
 Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            String [] param = {"mhs", "10.0.2.2"};
            Asynchron asynchron = (Asynchron) new Asynchron();
            asynchron.doInBackground(param);
        }
    });
    t.start();

我使用的AsyncTask的子类:

代码语言:javascript
复制
public class Asynchron extends AsyncTask <String, Void, Void>
{

    @Override
    protected Void doInBackground(String... params) {

        XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();

        builder.setServiceName(params[0]);

        builder.setHost(params[1]);

        builder.setPort(5222);

  builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);

        builder.setDebuggerEnabled(true);

        builder.setCompressionEnabled(true);

        connection = new XMPPTCPConnection(builder.build());
        SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");

        try {
            connection.connect();
            connection.login("testUser1", "1234");

        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMPPException e) {
            e.printStackTrace();
        }

        return null;
    }
}

我真的需要你的帮助。我如何解决我在题目中写的错误?

EN

回答 3

Stack Overflow用户

发布于 2016-03-24 01:11:38

只需使用:

代码语言:javascript
复制
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
compile "org.igniterealtime.smack:smack-experimental:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"

并删除builder.setCompressionEnabled(true);

票数 3
EN

Stack Overflow用户

发布于 2015-11-10 05:21:41

删除依赖项中的smack-resolver-javax。可能该jar正在覆盖一些遗留类

票数 2
EN

Stack Overflow用户

发布于 2015-11-10 19:04:07

只需使用smack-tcpsmack-experimentalsmack-android-extensions即可

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33618432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档