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


相关推荐

  • HTML 下划线与删除线[通俗易懂]

    HTML 下划线与删除线[通俗易懂]一、下划线标签<u></u><html><head><title>下划线</title></head><body><!–下面是下划线的用法–><u>这里显示的内容是下划线</u></body></html>二、删除线标签<s></s><html><he

    2022年6月4日
    52
  • 深度之眼Paper带读笔记NLP.10:DCNN

    深度之眼Paper带读笔记NLP.10:DCNN文章目录前言第一课论文导读句子建模简介相关技术前期知识储备前言本课程来自深度之眼deepshare.net,部分截图来自课程视频。文章标题:AConvolutionalNeuralNetworkForModellingSentences原标题翻译:一种用于句子建模的卷积神经网络作者:NalKalchbrenner等单位:UniversityofOxford发表会议…

    2022年6月10日
    183
  • Git 使用中显示“Another git process seems to be running in this repository…”问题解决

    Git 使用中显示“Another git process seems to be running in this repository…”问题解决

    2021年11月6日
    48
  • 浮动 IP

    浮动 IP在做双机的时候 设定一个 IP 通过访问这个 IP 具体到后台哪个机器 由系统指定 浮动 IP 是随资源一起走的 就是由软件根据情况把该 IP 设置在某台机器上 对外提供服务 为了避免因为一台机器 down 而导致不能对外提供服务 使得业务中断

    2025年8月26日
    5
  • java ee简介_Java EE 简介

    java ee简介_Java EE 简介JavaEE简介JavaEE基本架构JavaEE的诞生是为了解决传统C/S架构的弊端:客户端臃肿庞大,扩展性差等弊端。JavaEE将传统的两层结构细分为了四层。这四层分别是:Client层,Web层,Business层,EIS层JavaEE客户端JavaEE客户端层可分为以下几种:Web客户端,通常是浏览器呈现的网页,这种客户端成为轻量级客户端,因为他们不与…

    2022年7月7日
    17
  • Redis选择数据库分区

    Redis选择数据库分区Redis-cli命令连接:redis-cli命令下选择数据库分区可以有2种方式:1、选择数据库(redis可以有多个数据库,默认情况下是连接数据库0,redis配置文件中通过databasesnum来配置数量)127.0.0.1:6379>select2OK2、那么我们登录的时候,如何制定登录哪个库呢?./redis-cli-n3指定登录下标为3的数据库./redis-cli-n0等价于./redis-cli默认登录下标为0的数据库即使…

    2022年5月7日
    55

发表回复

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

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