使用Openfire和Asmack实现IM功能,经常出现“Thread already started”的错误

原创 2015年07月07日 16:32:24

最近使用Openfire和Asmack实现Android端的IM功能,但是实际使用的过程中,经常出现“java.lang.IllegalThreadStateException:Thread already started”的错误。

比如:

java.lang.IllegalThreadStateException
Thread already started
java.lang.Thread.checkNotStarted(Thread.java:871)
java.lang.Thread.start(Thread.java:1025)
org.jivesoftware.smack.PacketWriter.startup(PacketWriter.java:123)
org.jivesoftware.smack.XMPPConnection.initConnection(XMPPConnection.java:684)
org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:645)
org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:1062)
org.jivesoftware.smack.ReconnectionManager$2.run(ReconnectionManager.java:148)

查找发现,ReconnectionManager进行重连时,PacketReader和PacketWriter执行startup()方法时报错。startup()方法主要是启动一个线程,用来解析Packet。

“Thread already started”,顾名思义就是线程重复启动。我找到了半天都没有找到原因所在,最后在ConnectionConfiguration找到了原因。

ConnectionConfiguration里面有个参数,reconnectionAllowed,这个参数其实就是是否自动连接。使用ConnectionConfiguration.setReconnectionAllowed(boolean)来设置是否自动连接,默认重新尝试连接以防突然断开,重新连接管理将立刻连接到服务器和在尝试连接失败时增加延迟。你也可以自己调用Connection.connect()来手动连接。

问题就是,我设置了mConnectionConfiguration.setReconnectionAllowed(true),而同时我又实现了判断是否掉线,掉线则Connection.connect()。这样就悲剧地重复操作了。

解决办法也很简单,要么就是设置不自动连接,setReconnectionAllowed(false),要么就不用自己实现重连操作。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

安装Xen、创建Xen虚拟机、使用Xen虚拟机过程中经常出现的错误总结

目录 (1) 启动 Xend 时出现错误 ImportError: /usr /lib/python/xen/lowlevel/acm.so: undefined symbol: Py_Init...

安装Xen、创建Xen虚拟机、使用Xen虚拟机过程中经常出现的错误总结

使用 CentOS 5.2 默认安装的 Xen,启动 Xend 时出现如下错误: (1)  启动 Xend 时出现错误 ImportError: /usr /lib/python/xen/lowl...
  • zklth
  • zklth
  • 2011-04-21 20:16
  • 25354

c++编译时经常出现的错误

  • 2012-03-05 20:37
  • 2.58MB
  • 下载

Thread问题:解决 java.lang.IllegalThreadStateException: Thread already started. 错误

想实现一个文件上传监听机制,当文件一上传开启计时监听 传完后线程自动停止,下次再传线程再开启 /** 监听文件是否传送成功线程,若成功给服务器发消息拉取服务器反馈 调用方法为 *new Thr...

高并发请求服务器时,经常出现如下异常:java.lang.OutOfMemoryError: unable to create new native thread的解决方法

高并发请求服务器时,经常出现如下异常:java.lang.OutOfMemoryError: unable to create new native thread,对于此种情况,出现这种情况,是什么原...

在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)

转载自:http://quietmadman.blog.51cto.com/3269500/1359495 根据 XMPP 的 XEP 标准协议规范,实现 avatar 头像传输与存储的功能主要...

很多win8.1的用户在装了SQL server2008后在连接数据库时经常出现错误

很多win8.1的用户在装了SQL server2008后在连接数据库时经常出现错误: “在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证...

VC++6.0与OpenCV1.0环境经常出现的错误及解决办法

1. OpenCV2.2也添加了相关路径。。。。。。(P267<>)未通过编译,程序运行时报错fatal error C1083: Cannot open include file: 'cv.h': ...

MFC OpenCV编译程序时经常出现的一些错误

1.LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”       出现这类问题一般是由于所运行的项目是VC6(或者vs2003)创建的,而后又用VS20...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)