Spark部分流程说明

Spark部分流程说明

一 Spark 启动流程

Spark首先进入的是org.jivesoftware.launcher.Startup类的main方法。

这个方法主要是加载环境。其中,findParentClassLoader()方法加载ClassLoader,parent = Thread.currentThread().getContextClassLoader();
加载JiveClassLoader,final ClassLoader loader = new JiveClassLoader(parent, libDir);
将loader加入环境,Thread.currentThread().setContextClassLoader(loader);
启动spark,Class sparkClass = loader.loadClass(“org.jivesoftware.Spark”);
实例化spark为instanceOfSpark,并调用startup方法,
Method startupMethod = sparkClass.getMethod(“startup”);
startupMethod.invoke(instanceOfSpark);

然后进入org.jivesoftware.Spark类的startup()方法。这个方法主要是加载登陆窗体。
登陆窗体类org.jivesoftware.LoginDialog的方法invoke(JFrame parentFrame)
LoginPanel loginPanel = new LoginPanel();
LoginPanel是LoginDialog类的一个内部类。

加载好LoginDialog,登陆页面就出现了。

二 Spark 登录流程

登录有几种方式,比如点击登录按钮,或者自动登录。但无论哪种方式,都会进入org.jivesoftwareLogin.Dialog类的内部类LoginPanel的validateLogin这个方法。
validateLogin简单说,分为3步:
1、boolean loginSuccessfull = login();
2、if (loginSuccessfull) startSpark();
3、loginDialog.dispose();

第一步主要是调用smack构造连接类,进行连接和登陆。其中,isSSL是判断是否使用ssl,因为是否使用ssl,对于smack来说,启用的连接类是不同的。

第二步startSpark():
1、启动org.jivesoftware.MainWindow窗体。
MainWindow是继承org.jivesoftware.spark.ui.ChatFrame,而ChatFrame是继承JFrame
MainWindow采用单例模式singleton
buildMenu();
2、创建一个JPanel的子类Workspace,并把它添加到MainWindow。Workspace采用单例模式singleton。
这部分不做详细说明了。就是Spark主体窗体的各个内容的设置和填充。

第三步是析构LoginDialog窗体。

三 Spark 聊天窗口

双击Spark面板的某个联系人项(ContactItem),即激活
org.jivesoftware.spark.ui.ContactList contactItemDoubleClicked(ContactItem item)

继续向下:
org.jivesoftware.spark.ChatManager activateChat() =>org.jivesoftware.spark.ui.ChatContainer addChatRoom(final ChatRoom room)

org.jivesoftware.spark.ui.ChatContainer fireChatRoomOpened(ChatRoom room)

org.jivesoftware.spark.ui.conferences.ConferenceServices  addChatRoomListener() chatRoomOpened(final ChatRoom room)

举例说明:
ChatManager chatManager = SparkManager.getChatManager();
chatManager.activateChat(“allen@mail.21315.com“, “allen”);

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110643.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【linux 】linux 命令:查看 Linux 服务器配置

    目录一、服务器型号二、操作系统三、CPU四、内存五、硬盘六、其他一、服务器型号dmidecode|grep”SystemInformation”-A9|egrep”Manufacturer|Product”二、操作系统(1)当前操作系统发行版信息:cat/etc/redhat-release(2)操作系统发行版详细信息:lsb_release-a三、CPU(1)CPU统计信息:lscpu(2)CPU型号

    2022年4月14日
    326
  • cubieboard上手

    cubieboard上手最近刚买了cubieboard,入手到玩转后的各个过程记录下购买链接:[url]http://item.taobao.com/item.htm?id=18271795262[/url]已有装备:笔记本,无线路由器入手装备:cubieboard,带电源,ttl2usb线等关键问题:无显示器与电视超市购物:读卡器+网线,(从手机上拿的TF卡)[siz…

    2022年7月22日
    13
  • js选项卡效果

    js选项卡效果documentAPI getElementBy 返回具有指定 ID 属性值的第一个对象的一个引用 getElementsB 返回带有指定标签名的对象的集合 返回元素的顺序是它们在文档中的顺序 getElementsB 属性设置或返回元素的 class 属性 body 导航栏部分 HTML 代码 divclass box lt divclass box body

    2025年8月24日
    4
  • Python开源爬虫框架:Scrapy架构分析

    Python开源爬虫框架:Scrapy架构分析

    2021年9月3日
    65
  • Vue上传文件操作(没有CV,认真看)

    Vue上传文件操作(没有CV,认真看)项目场景: 通过vue上传文件基本操作问题描述:使用html上传文件时,很容易理解,那么vue文件上传呢?我们学了vue不可能还往里面写原生html的内容吧!先放代码再解释:<template><div><el-form:model=”form”><el-uploadaction=”url”:auto-upload=”false”:on-change=”onchanger”:fil

    2022年10月10日
    3
  • RSA加解密算法的Java实现

    RSA加解密算法的Java实现

    2021年4月9日
    155

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号