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”);

 

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 图片的文件格式后缀名_各种文件的后缀名

    图片的文件格式后缀名_各种文件的后缀名常见的文件后缀名.ACA:Microsoft的代理使用的角色文档.acf:系统管理配置.acm:音频压缩管理驱动程序,为Windows系统提供各种声音格式的编码和解码功能.aif:声音文件,支持压缩,可以使用WindowsMediaPlayer和QuickTimePlayer播放.AIF:音频文件,使用WindowsMediaPlayer播放.AIFC:音频文件,使用Win…

    2022年10月25日
  • 用Python写了个工具,完美破解了MySQL!!(建议收藏)

    用Python写了个工具,完美破解了MySQL!!(建议收藏)再也不怕忘记MySQL的用户名和密码了,用这个工具可以秒破MySQL,冰河强烈建议收藏!!

  • YUI3 使用总结

    YUI3 使用总结1. YUI3总体认识1.1 面向对象的JS编程,RIA工具:面向对象的JS编程,主要体现的以下几个方面:1. 继承JS有三种继承方式:javascript中继承一般分为三种方式:”类式继承”,”原型继承”,”掺元类”2. 封装:JS的Function自身就实现了对变量的封装,局部变量等。Object对性的属性也可以实现一定的封装效果3. 接口和抽象类YUI3…

  • 提问的艺术(转帖)

    提问的艺术(转帖) 一、为什么要探讨提问的艺术呢?首先我们要搞清楚什么是问题,为什么要提问,为什么要强调提问的艺术?所谓问题指的是,所有造成我们焦虑、争议的、不能自我答复和解决的一些思考和事情,而且在当时并没有适当答案可以解决。在这个网络时代,没有人是全能的,谁都会在必要的时候为了寻求帮助和寻找答案而提问。而所谓艺术,指的是通过某种表现手法,使人产生喜爱感觉。谁都需要自己的提问,可以在最短、最快

  • CreateFileMapping函数[通俗易懂]

    为指定文件创建或打开命名或未命名的文件映射对象。要为物理内存指定NUMA节点,请参阅CreateFileMappingNuma。语法HANDLEWINAPICreateFileMapping(_In_HANDLEhFile,_In_opt_LPSECURITY_ATTRIBUTESlpAttributes,_In_DWORDflProtect,…

  • Activity工作流引擎学习笔记(二)

    Activity工作流引擎学习笔记(二)核心APIProcessEngine说明:1) 在Activiti中最核心的类,其他的类都是由他而来。2) 产生方式:在前面看到了两种创建ProcessEngine(流程引擎)的方式,而这里要简化很多,调用ProcessEngines的getDefaultProceeEngine方法时会自动加载classpath下名为activiti.cfg.xml文件。3) 可以产生R

发表回复

您的电子邮箱地址不会被公开。

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