我无法连接到服务器。 请帮我解决错误。 我想知道所有需要的罐子。 怎么做初始smack配置。 我想在java中构建简单的聊天应用程序。
import java.io.IOException;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
public class Tests
{
public static void main( String[] args ) throws SmackException, IOException, XMPPException
{
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setHost("127.0.0.1")
.setPort(5222)
.build();
AbstractXMPPConnection conn1 = new XMPPTCPConnection(config);
try
{
conn1.connect();
}
catch (XMPPException e)
{
e.printStackTrace();
}
try
{
conn1.login("username","password");
}
catch (XMPPException e)
{
e.printStackTrace();
}
}
}
错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/jxmpp/util/XmppStringUtils
at org.jivesoftware.smack.provider.ProviderManager.getKey(ProviderManager.java:314)
at org.jivesoftware.smack.provider.ProviderManager.removeIQProvider(ProviderManager.java:217)
at org.jivesoftware.smack.provider.ProviderManager.addIQProvider(ProviderManager.java:199)
at org.jivesoftware.smack.provider.ProviderManager.addLoader(ProviderManager.java:128)
at org.jivesoftware.smack.initializer.UrlInitializer.initialize(UrlInitializer.java:54)
at org.jivesoftware.smack.SmackInitialization.loadSmackClass(SmackInitialization.java:232)
at org.jivesoftware.smack.SmackInitialization.parseClassesToLoad(SmackInitialization.java:193)
at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:163)
at org.jivesoftware.smack.SmackInitialization.processConfigFile(SmackInitialization.java:148)
at org.jivesoftware.smack.SmackInitialization.<clinit>(SmackInitialization.java:116)
at org.jivesoftware.smack.SmackConfiguration.getVersion(SmackConfiguration.java:96)
at org.jivesoftware.smack.ConnectionConfiguration.<clinit>(ConnectionConfiguration.java:38)
at Tests.main(Tests.java:14)
Caused by: java.lang.ClassNotFoundException: org.jxmpp.util.XmppStringUtils
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 13 more
答案 0 :(得分:0)
我在Maven项目中使用过Smack,这里是我定义的依赖项。
<dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3</artifactId>
<version>1.1.4c</version>
</dependency>
<dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3_min</artifactId>
<version>1.1.4c</version>
</dependency>
<dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3_xpath</artifactId>
<version>1.1.4c</version>
</dependency>
<dependency>
<groupId>org.igniterealtime.smack</groupId>
<artifactId>smack-tcp</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>org.igniterealtime.smack</groupId>
<artifactId>smack-extensions</artifactId>
<version>4.0.6</version>
</dependency>
并在代码中:
ConnectionConfiguration config = new ConnectionConfiguration("IM_DOMAIN", 5222);
config.setDebuggerEnabled(false);
config.setSecurityMode(SecurityMode.disabled);
XMPPTCPConnection con = new XMPPTCPConnection(config);
try {
con.connect();
con.login("USERNAME", "PASSWORD");
Message msg = new Message("RECIPIENT_JID");
msg.setBody("message");
msg.setType(Type.chat);
con.sendPacket(msg);
} catch (SmackException | XMPPException | IOException | InterruptedException e) {
throw e;
} finally {
if (null != con) {
try {
con.disconnect();
} catch (NotConnectedException e) {
}
}
}