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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python Qt GUI设计:5种事件处理机制(提升篇—3)

    Python Qt GUI设计:5种事件处理机制(提升篇—3)事件处理机制本身很复杂,是PyQt底层的知识点,当采用信号与槽机制处理不了时,才会考虑使用事件处理机制。

    2022年5月16日
    40
  • MySql必知必会实战练习(三)数据过滤

    在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结。1.whe

    2021年12月29日
    33
  • 网口调试步骤_万兆光口和千兆光口对接

    网口调试步骤_万兆光口和千兆光口对接千兆网口、光口调试总结配置6096端:工作模式的配置方式:1、 硬件配置,通过电阻上下拉确定;6096的硬件配置不可以错,其在portstatus寄存器状态中有相应的寄存器位体现硬件配置的工作模式。2、 软件配置,主要是配置链路层的工作模式。主要是设置PCS(Physicalcodingsublayer)寄存器。3、 Marvell的PHY芯片有个特性,叫P

    2022年9月13日
    0
  • Python获取int最大值和float最大值

    Python获取int最大值和float最大值计算机所能表示的最大值 根据你的计算机的位数决定 有机计算机是 64 位 有的是 32 位 因此具体情况各不相同 本人的电脑是 64 位的 1 获得 int 型的最大值 importsysMAX INT sys maxsizeprint MAX INT 2 获得 float 型的最大值灰常简单 max float float inf 是的 你没有看错 最大的浮点数就是这个 inf

    2025年6月10日
    0
  • Nginx转发https

    Nginx转发httpsnginx

    2022年10月19日
    0
  • 分类变量的卡方检验(python实现&SPSS实现)「建议收藏」

    分类变量的卡方检验(python实现&SPSS实现)「建议收藏」卡方介绍卡方检验是针对自变量和因变量都是分类数据,也就是说带有属性的数据;而单因素方差分析是自变量是分类数据,因变量是连续型的数据。还有一点:方差分析是参数检验,而卡方检验是属于非参数检验。卡方检验是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小:卡方值越大,偏差越大,越趋于不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。案例介绍本次实验是研究聚类结果和标签DR的关系,即检验我们的聚类有没有意义。

    2022年8月30日
    4

发表回复

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

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