使用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),要么就不用自己实现重连操作。

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

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

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

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

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

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

  • 2012年03月05日 20:37
  • 2.58MB
  • 下载

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

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

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

1.LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”       出现这类问题一般是由于所运行的项目是VC6(或者vs2003)创建的,而后又用VS20...

cell重用注意事项(对于经常出现重用错误的程序猿吗,可参考一下)

注意事项: 1,在cellForRowAtIndexpath里如果wei'dui

tomcat下网站经常出现404错误_再刷新就正常_解决方法

刷新tomcat下网站经常出现404错误_再刷新就正常_解决方法 linux 下tomcat与apache结合后 刷新tomcat下网站经常出现404错误_再刷新就正常很长时间没有解决? 后来我终...

XCode经常出现的错误------ EXC_BAD_ACCESS 解决方案

我们做 iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像 T...

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

很多win8.1的用户在装了SQL server2008后在连接数据库时经常出现错误: “在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Openfire和Asmack实现IM功能,经常出现“Thread already started”的错误
举报原因:
原因补充:

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