【问题标题】:Smack throws "java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserFactory:"Smack 抛出“java.lang.ClassNotFoundException:org.xmlpull.v1.XmlPullParserFactory:”
【发布时间】:2014-08-03 11:56:47
【问题描述】:

所以我使用 Smack 来运行我的英雄联盟聊天机器人,但是我什至无法让机器人出现,因为我似乎无法弄清楚缺少类错误。下面的代码和错误,感谢您的帮助,-Nick

另外:是的,这段代码取自一个示例,因为当我自己尝试时,我仍然遇到同样的错误。

package com.nickparks.bot;

import java.util.*;
import java.io.*;

import org.jivesoftware.smack.*;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;

public class JabberSmackAPI implements MessageListener{

    XMPPConnection connection;

    public void login(String userName, String password) throws XMPPException
    {
        ConnectionConfiguration config = new ConnectionConfiguration("chat.na1.lol.riotgames.com",5223);
        connection = new XMPPTCPConnection(config);

        try {
            connection.connect();
            connection.login(userName, password, "xiff");
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void displayBuddyList()
    {
        Roster roster = connection.getRoster();
        Collection<RosterEntry> entries = roster.getEntries();

        System.out.println("\n\n" + entries.size() + " buddy(ies):");
        for(RosterEntry r:entries)
        {
            System.out.println(r.getUser());
        }
    }

    public void disconnect()
    {
        try {
            connection.disconnect();
        } catch (SmackException.NotConnectedException e) {
            e.printStackTrace();
        }
    }

    public void processMessage(Chat chat, Message message)
    {
        if(message.getType() == Message.Type.chat)
            System.out.println(chat.getParticipant() + " says: " + message.getBody());
    }

    public static void main(String args[]) throws XMPPException, IOException
    {
        // declare variables
        JabberSmackAPI c = new JabberSmackAPI();





        // Enter your login information here
        c.login("bot", "Password");

        c.displayBuddyList();

        System.out.println("-----");

        System.out.println("Who do you want to talk to? - Type contacts full email address:");
        String talkTo = br.readLine();

        System.out.println("-----");
        System.out.println("All messages will be sent to " + talkTo);
        System.out.println("Enter your message in the console:");
        System.out.println("-----\n");

        while( !(msg=br.readLine()).equals("bye"))
        {
            System.out.println("test");
        }

        c.disconnect();
        System.exit(0);
    }

}

这是我得到的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory at org.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:321)
atorg.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:316)
at org.jivesoftware.smack.SmackConfiguration.<clinit>(SmackConfiguration.java:148)
at org.jivesoftware.smack.ConnectionConfiguration.<init>(ConnectionConfiguration.java:65)
at com.nickparks.bot.JabberSmackAPI.login(JabberSmackAPI.java:16)
at com.nickparks.bot.JabberSmackAPI.main(JabberSmackAPI.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 11 more

【问题讨论】:

    标签: java xmpp classnotfoundexception smack


    【解决方案1】:

    你需要在你的类路径中有XPP3 (XML Pull Parser 3)。 Smack 4 不再捆绑它(与 Smack 3 不同)。

    我还建议使用具有依赖解析的构建系统,如 maven 或 gradle,它会自动获取所需的依赖。

    【讨论】:

    • 是的,自从我发布这篇文章并弄清楚了所有问题后,我实际上一直在研究它,使它成为 Maven 并降级到 smack 的 3.4 :D
    • 我不推荐使用 Smack 3。
    • compile group: 'xpp3', name: 'xpp3', version: '1.1.4c' 添加到 gradle 构建文件并不能解决这个问题。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多