使用Openfire和Asmack实现IM功能,经常出现“Thread already started”的错误
来源:互联网 发布:视频格式转换软件电脑 编辑:程序博客网 时间:2024/05/22 04:34
最近使用Openfire和Asmack实现Android端的IM功能,但是实际使用的过程中,经常出现“java.lang.IllegalThreadStateException:Thread already started”的错误。
比如:
java.lang.IllegalThreadStateExceptionThread already startedjava.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),要么就不用自己实现重连操作。
0 0
- 使用Openfire和Asmack实现IM功能,经常出现“Thread already started”的错误
- Android端使用asmack实现IM
- Android中thread.start()出现的thread already exist错误
- Android XMPP 例子(Openfire+asmack+spark) 出现登陆连接错误
- Thread问题:解决 java.lang.IllegalThreadStateException: Thread already started. 错误
- 聊天类IM开发框架openfire + asmack
- XMPP 实现IM(二)——openFire的配置和使用
- 解决 java.lang.IllegalThreadStateException: Thread already started. 错误
- 解决 java.lang.IllegalThreadStateException: Thread already started. 错误
- 单击事件开启线程时,再次单击就会出现 java.lang.IllegalThreadStateException: Thread already started. 错误
- Android客户端基于XMPP的IM(openfire+asmack)的聊天工具之注册(二)
- Android客户端基于XMPP的IM(openfire+asmack)的聊天工具之登录(三)
- 即时通讯实现方式(采用openfire和asmack方式)
- IllegalThreadStateException: Thread already started解决
- Android XMPP聊天的实现(asmack+openfire)
- Android asmack 简单功能的实现
- IM-------openFire 的安装和配置
- openfire+android实现IM
- Laravel5 入门小项目详细教程
- xUtils 中的BitmapUtils 全面注释
- Android UI 自动化测试
- 每天小练笔5-删除重复字符
- jasperreport ireport创建PDF中文字体问题终极解决方法
- 使用Openfire和Asmack实现IM功能,经常出现“Thread already started”的错误
- 字节对齐详解,及可能带来的问题
- git 常用命令
- 令牌制作
- build
- 中国正在失去32样东西 看后感慨万千
- python中中文字符报错解决
- Android的httpGet方法的参数字符串
- WebRTC在Windows下的编译过程及常见问题处理