仿QQ聊天软件(JavaFX+云端数据库)

仿QQ聊天软件(JavaFX+云端数据库)

这个项目是这学期(大二上学期学完Java后的期末项目),寒假闲着无聊就整理下发上来供大家学习以及参考啦(因为国内关于JavaFX的各种资料感觉都太浅了,本来就是想着要比Swing好看才用的JavaFX,结果大部分资料整的比Swing还难看,当然也用了一些开源的JavaFX的Jar包),由于自身经验不足以及开发时间有限,若有编写不足请多多包涵。详细的代码放在GitHub上了,若是对您有帮助,欢迎Fork以及Star(Star是收藏的正确姿势哦)。

客户端:https://github.com/YTGhost/Ultimate-Chat

服务端:https://github.com/YTGhost/Ultimate-Chat-Server

项目的介绍我就偷点懒拿交项目时的文档啦,有什么问题的话可以在下面留言。还有由于有涉及到数据库连接以及短信平台的接入,客户端和服务端的某些代码处需要略微修改,我会在客户端和服务端的GitHub仓库里进行说明,像发送验证码的短信平台也是要自己去注册,数据库方面若是想用MySQL等就自己小小修改一下啦。

一、项目简介

​ 该项目是一个仿Tim的桌面即时聊天软件,其服务端架设在阿里云云端服务器上,用户可通过运行客户端来实现与另一个用户的通信。本项目使用javafx架构来设计GUI,使用javafx可以运用CSS进行界面美化。同时使用了Microsoft Azure云计算平台的SQL服务来进行数据储存,这使得本项目基本可以算是一个真正能使用的“Tim”。本项目实现了用户注册(发送手机验证码进行验证)、登录、重置密码(发送手机验证码进行验证)、查看个人信息界面、修改在线状态(实时反馈到好友及个人的界面)、发送好友申请并添加好友(离线或在线都可)、未读消息提醒和未读通知提醒、好友主页查看、好友备注修改、好友列表、好友分组切换、聊天(若对方离线,其登录时也可收到)。

​ 由于开发时间不足,例如群聊和消息记录等部分功能并未来得及完成,若有需要可以自行添加。

二、项目应用技术简介

2.1 Java

​ 使用Java语言作为项目编写的基础,包括面向对象、异常处理、输入输出、多线程和网络连接。

2.2 JavaFX

​ 使用JavaFX进行全局的控制和GUI设计。

2.3 CSS和FXML

​ 使用CSS(层叠样式表)配合FXML(JavaFX的一种XML分支语言)来进行GUI的布局和美化。

2.4 JDBC

​ 使用JDBC来连接云端数据库。

2.5 T-SQL

​ 使用Transact-SQL语言来与Azure SQL云端数据库进行交互。

2.6 Linux基本操作

​ 通过对阿里云ECS云服务的配置,在其上搭建了Ubuntu16.04系统和JRE环境,并在其上运行服务端程序。

2.7 通过HTTP的Get,POST方式提交短信发送请求

​ 接入了短信发送平台,在服务端通过HTTP的Get,POST方式提交短信发送请求

三、外形设计

3.1 登录界面

在这里插入图片描述

3.2 注册界面

在这里插入图片描述

3.3 忘记密码

在这里插入图片描述

3.4 主界面

在这里插入图片描述

3.5 查找用户

在这里插入图片描述

3.6 用户个人界面

在这里插入图片描述

3.7 好友个人界面

在这里插入图片描述

3.8 聊天界面

在这里插入图片描述

四、详细设计

4.1客户端项目结构

在这里插入图片描述

  • jar文件夹中是本项目所用的jar包
  • main文件夹中Main是该项目的启动
  • manager文件夹中Manager是全局的操作类,receiveThread类是客户端的第二个线程,用于实时读取服务端发来的信息。
  • resource文件夹里是本项目中运用的图片和一些缓存
  • utils文件夹中是本项目所运用到的一些工具类
  • view文件夹中controller文件夹是javafx的controller,而fxml中是使用javafx设计的fxml和CSS文件

4.2 服务端项目结构

在这里插入图片描述

  • Jar文件夹中是该项目所用jar包
  • utils文件夹中是该项目所用工具类
  • ChatServer为服务端的主文件
  • ChatThread为服务端多线程的实现

4.3 设计模式

​ 该项目服务端和客户端的实现均采用了工厂模式:
在这里插入图片描述
通过SignFactory类,实现消息传递的接口,使得每一部分的功能被分隔为一个一个的类,不同的分支做不同的事情,然后在SignFactory中聚合,这样不仅便于扩展,也非常符合“开闭原则”(其上为Server端的SignFactory)。

4.4 数据库

在这里插入图片描述
​ 该项目使用Microsoft Azure数据库进行数据储存,这使得该项目脱离了本地局域网。一共制定了三个表:

4.4.1 friendinfo表

在这里插入图片描述
​ 该表用于储存用户的好友,分组和好友的备注

4.4.2 offline_message表

在这里插入图片描述
​ 该表用于储存用户向已经离线的好友发送的信息

4.4.3 userinfo表

在这里插入图片描述
​ 该表用于储存用户的个人信息以及储存接收的离线好友请求。

4.4 消息接收机制

​ 本项目所用消息气泡为Bubble类和继承了Bubble类的Message类,Bubble类为消息气泡的初始化,而Message类则将消息气泡封装起来,便于加入到CircularQueue中,即消息队列中。

​ 在用户离线的时候,向该用户发送的信息被服务端储存到云端数据库中:
在这里插入图片描述
​ 该用户上线的时候,服务端会去offline_message表中寻找是否存在有发给其的离线消息,若有,则发给该用户,消息被用户接收并储存到未读消息队列中,并用Badge对用户进行提醒。

4.5 注册和找回密码机制

​ 该项目使用了手机短信进行注册验证,服务端使用HTTP的Get,POST方式提交短信发送请求,并发送验证码,例如:
在这里插入图片描述
​ 注册时运用CSS来实现动态检测密码是否符合规则,例如:
在这里插入图片描述

4.6好友信息提醒和状态变更

​ 该项目实现了好友信息的气泡提醒,例如:
在这里插入图片描述在这里插入图片描述
​ 这两个Badge都会实时的进行修改,在好友上下线更改状态时,其好友也可动态接收到其状态,并更改其头像相应颜色,例如当好友切换至忙碌状态时,圆环变为红色。当好友离线时,圆环变为灰色且头像变为灰色。当用户上线时,可接收到其好友在其离线时发送的信息

4.7 聊天

​ 该项目实现了实时的在线聊天,文字和图片都可。离线消息也可接收。聊天模式是即阅即焚的。

4.8 服务端部署

在这里插入图片描述
服务端部署在阿里云ECS云服务器上,实现联网。

五、系统手册

由于图片可能无法体现出设计和操作,故随文档附加视频

5.1 登录、注册和找回密码

在这里插入图片描述
在这里插入图片描述

均在此页面,找回密码也可在用户的个人信息中进行:
在这里插入图片描述

5.2 好友分组切换、查看信息和删除

在这里插入图片描述
右击好友即可

5.3个人信息查看、修改状态和登出

在这里插入图片描述
右击即可

5.4查找用户

在这里插入图片描述
输入账号后回车即可查找

六、创新

  • 使用javafx作为框架,并用FXML和CSS进行GUI布局和美化
  • 使用阿里云ECS服务器在Ubuntu16.04上对服务端进行远端部署,使之脱离局域网,让客户端和服务端真正“online”。
  • 使用Microsoft Azure SQL云端数据库进行数据储存
  • 编写了消息队列并使用Badge使聊天信息的接收和好友申请更加美观
  • 接入了短信发送平台,在服务端通过HTTP的Get,POST方式提交短信发送请求
  • 使用bcrypt对用户密码在数据库进行加密
  • 正则表达式配合CSS来进行诸如注册时的数据验证,使之美观而可靠。
  • 使用工厂模式来替代繁琐的if/else

七、总结与评估

​ 通过这次的项目实践,使得我更加深入地了解了Java的程序开发,并尝试使用工厂模式来替代繁琐的if/else,学习了javafx和CSS替代了SWING来进行GUI设计,了解了数据库的基本应用,学习了如何通过HTTP接入平台API。写这个项目让我深切了解到了我们平常所用软件的大致结构逻辑,并根据需要设计了自己的工具类以及在原有的类上进行拓展。这无疑是充满了挑战的,也激发了我编程的热情。

​ 关于该项目实现功能基本达到,但由于测试时间较短,再加上本人的经验不足,可能在某些功能上存在不足,还请多多包涵。项目文件为保证完整故放完整的idea项目文件夹。

八、参考文档

https://github.com/jfoenixadmin/JFoenix

https://docs.oracle.com/javase/8/docs/api/

https://docs.oracle.com/javase/8/javafx/api/toc.htm

一、源码描述 GG2014是QQ的高仿版,包括客户端和服务端,可在广域网部署使用。我的目标并不 是做一个QQ仿版的玩具,而是希望做成一个能够真正使用的产品(这个过程还有 很长的路要走),并持续维护下去。小编亲自测试完美运行,强烈推荐一下,感兴趣 的朋友们千万不要错过啊。 二、功能介绍 GG2014 已经实现了如下功能: (01)注册、登录、添加好友、好友列表。 (02)自拍头像。 (03)文字聊天、字体设置、GIF动态表情、窗口震动、截图、手写板、登录状态 (在线、离开、忙碌、勿打扰、隐身)、输入提醒 (04)群功能:创建群、加入群、退出群、群聊天 (05)文件传送、文件夹传送(支持断点续传) (06)语音视频聊天 (07)远程磁盘 (08)远程协助 (09)共享桌面(可以指定要共享的桌面区域) (10)可靠的P2P (11)网盘 (12)离线消息 (13)离线文件 (14)语音消息、语音留言 (15)最近联系人列表 (16)系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时 关闭程序还是隐藏窗口。 (17)聊天记录:支持本地保存和服务器端保存两种方式。 (18)好友分组:新增/删除分组,修改分组名称,改变好友的所属分组。 (19)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点 击头像,将弹出与好友的聊天框。 (20)输入提醒:像QQ一样,当对方正在输入消息时,我这边的聊天框可以看到对方 “正在输入”的提示。 (21)自动记录:GG2014会自动记录上次打开的主界面的位置、大小;最后一次打开 的聊天窗口的大小;最后一次 设定的字体的颜色、大小等。 (22)打开聊天窗口时,自动显示上次交谈的最后一句话。 三、注意事项 1、开发环境为Visual Studio 2010,无数据库,使用.net 2.0开发。 2、该源码仅供学习交流使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值