使用Openfire和Asmack实现IM功能,经常出现“Thread already started”的错误
2015-07-07 16:32
351 查看
最近使用Openfire和Asmack实现Android端的IM功能,但是实际使用的过程中,经常出现“java.lang.IllegalThreadStateException:Thread already started”的错误。
比如:
查找发现,ReconnectionManager进行重连时,PacketReader和PacketWriter执行startup()方法时报错。startup()方法主要是启动一个线程,用来解析Packet。
“Thread already started”,顾名思义就是线程重复启动。我找到了半天都没有找到原因所在,最后在ConnectionConfiguration找到了原因。
ConnectionConfiguration里面有个参数,reconnectionAllowed,这个参数其实就是是否自动连接。使用ConnectionConfiguration.setReconnectionAllowed(boolean)来设置是否自动连接,默认重新尝试连接以防突然断开,重新连接管理将立刻连接到服务器和在尝试连接失败时增加延迟。你也可以自己调用Connection.connect()来手动连接。
问题就是,我设置了mConnectionConfiguration.setReconnectionAllowed(true),而同时我又实现了判断是否掉线,掉线则Connection.connect()。这样就悲剧地重复操作了。
解决办法也很简单,要么就是设置不自动连接,setReconnectionAllowed(false),要么就不用自己实现重连操作。
比如:
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),要么就不用自己实现重连操作。
相关文章推荐
- 把ssl模块加入到已经编译好的apache中
- linux下php安装oci8扩展
- Cloudera的CDH和Apache的Hadoop的区别
- openfire/spark/asmack 环境调试纪要
- Kafka架构设计:分布式发布订阅消息系统
- wordpress Oops! That page can’t be found.
- 建“项目”与建”网站“的小错误
- linux使用getopt解析参数
- linuxcnc python 简单的图形界面
- OpenCV 3.0 安装与VS2012的部署
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、功能、select
- 如何通过Shell脚本显示一幅图片
- CentOS6.x安装zabbix
- Apache Kafka:下一代分布式消息系统
- Centos 6.4 minimal最小化安装完成后,光盘安装setup工具
- ubuntu中安装samba 分类: linux 学习笔记 ubuntu 2015-07-07 16:14 46人阅读 评论(0) 收藏
- Apache Thrift 在 Ubuntu 的简单使用
- Linux:install command
- shell中的$(( )) 的用途:主要用在整数的运算$(( a+b*c ))
- Apache2.4.x与Apache2.2.x的一些区别