java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)

article/2025/10/25 22:12:43

既然QQ能仿ICQ, 咱java也来个仿QQ.

在我刚学完java后,就想做点什么项目锻炼下自己的技能。凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了。

然后他想让我也一块做这个,我心想,像qq这么高难度的项目肯定复杂得要死,所以我是想都不敢想的。

没想到后来的偶然的一天,我手痒了,想用java做一个简单的聊天室。然后说做就做,着手开干,不一会,凭着对java和通信的有些基础的掌握,写出了一个简陋的聊天室。简陋到粗糙的地步,粗糙到只有聊天的文字一行一行的堆砌在面板上,早期效果截图没保存,不过大家凭着自己的想象力也不难脑补。

后来,我想,要是能给加个气泡就好看多了,于是,开始上网查资料,奈何,资料撩撩几笔,而又残缺不全,只能从有限的资料里找些蛛丝马迹,网上找来的知识零零散散,再凭着自己的理解进行简单拼凑之后,又开始上手开发。

在经过了数个日日夜夜之后,终于搞成了,下面来一张**早期的**效果图给大家看看:1f85117d13e19169c6b5eab576f2a219.png

当然,这个时候还只有一个聊天窗口,登录窗口和主窗口都没有,可以说是简易版的聊天软件了。

在做完这个之后,我成就感爆棚,顿时自己又飘了,想着这个能做完,离qq也不远了,于是开始正式做仿qq项目。

在后来的日子里,我对这个项目进行不断地改进和拓展,终于完成了基础聊天业务,并添加了附加的高级功能。

项目迭代历程大致如下:聊天文字堆砌

添加气泡,完成简易聊天室

添加登录注册窗口

添加主窗口

通信框架升级

数据库优化升级

添加群聊天

添加群资料

添加远程桌面

添加语音消息

添加音视频通话

下面谈谈令我印象深刻的几段经历,每每回忆起,不胜感动。。。。。。

刻骨铭心回忆录:swing美化:为改变java swing中固有的丑陋界面,又特地上网学习了关于swing的美化,并结合自己 实践不断地改进才得到现在这样比较满意的效果。

通信框架: 从一开始的java序列化到后来为了降低码流而改用netty框架,又进行了一次新的摸索和尝试,又来了一个地毯式的“更新迭代”。

截屏: 为了实现截屏效果,特地从网上找来教程,不过功能很朴素,只提供了基本的截屏功能,作为完美主义的我岂能容忍,于是又是几天的探索才做的功能相对的齐全,又长舒了一口气。

背景修改: 再然后就是对背景的修改,又想能改背景图,又想能改背景色,又要保存背景配置,又经历了一番长久地探索。

群资料: 私聊做完之后做群聊,群聊做完之后又做群资料,其中诸如群首页,群相册,群文件,群成员,群公告这些又是一轮烧脑。

文件发送: 为了降低服务器带宽,提高传输速率,我采用了p2p打洞技术,还是tcp打洞,在众人都说tcp打洞不可能实现的情况下硬是凭着坚韧摸索了出来,想到这里又是一把鼻涕泪。

远程桌面: 从一开始的简单传输指令与图像,到最后的反复测试优化,不断缩减延迟,提升体验,才 达到了与qq远程桌面相接近的远程效果,当然主要得益于算法方面的优化。

视频通话: 从一开始选择JMF框架,再到放弃JMF选择javacv, 再到选择jmf, 再到怀疑jmf, 再到选择jmf框架辅之以udp打洞才突破了技术壁垒。

服务器方面: 从一开始直接实例调用connetion对象,到后来为提升性能改用c3p0数据库缓存池,又是一轮辛苦的“劳动”。

以上每一次都是举步维艰,其中艰辛,不言自明,最后,在经历9个月的探索开发和迭代,才终于完成,实属不易啊。

下面,来几张效果图给大伙看看吧041312ffe8608ff0ab5d696d1f43ce07.png

47c2735bdb6f96f7121f4d9c931a7d98.png

远程桌面效果图:734dafb0630fd1528189240acc9398f7.png

视频通话效果图:3da06f85696b6ebb408d5a31f8651b1f.png

然后,懒得码字,也懒得重新做图了,就从其他地方找来张图详细的介绍下项目实现的功能吧:

10d4f46b72568733a8210c06626798eb.png

最后,这个仿qq项目已经开源,小伙伴不再需要花费积分下载了,在此贡献给对java仿qq感兴趣的你。

gitee下载地址:https://gitee.com/asddgasg/java_qq_oim

欢迎加入qq交流群一起学习讨论:679578626


http://chatgpt.dhexx.cn/article/IdCWP3CM.shtml

相关文章

Patching OIM 11.1.1.5.0 to 11.1.1.5.3

本指南也可以应用到OIM11.1.1.5.1或11.1.1.5.2。 获取修补程序您将需要以下补丁: 1. Patch Name: 13106312Product: Oracle SOA PlatformRelease: 11.1.1.5.0 2. Patch Name: 13704894Product: Oracle Identity ManagerRelease: 11.1.1.5.0 Initial SetupCreate a director…

使用OIM的Design Console配置

1、运行安装oim的文件(我的是Oracle_IDM1/bin里面的config.sh),选择如下 next 第一个为主机名(电脑名) next...finish 2、启动designconsole 在Oracle_IDM2里面找到wlfullclient.jar拷贝到Oracle_IDM1/designconsole/ext里面。 运…

给oim_对OIM Web(UI)层进行压力测试

给oim Oracle IDM中的默认配置保留20个专用于服务前端(UI)请求的线程 。 这基本上意味着应用程序服务器具有20个线程池,可用于为通过Web控制台(/ identity或/ sysadmin)访问OIM的用户提供服务。 对于Weblogic &#x…

如何OIM 11.1.1.5.0打补丁到11.1.1.5.2

将OIM11.1.1.5.0安装好之后,如需要打补丁到11.1.1.5.2,则按照如下的步骤: 下载两个patch,一个是SOA的,一个是OIM的。Oracle官方文档说如果想要给OIM打补丁的话就需要先把SOA先升级。 官方文档的地址:https://updates.oracle.com/Orion/Services/download?type=readme&…

基于 JavaFX 开发的聊天客户端 OIM-即时通讯

OIM 详细介绍 一、简介 OIM是一套即时通讯的聊天系统,在这里献给大家,一方面希望能够帮助对即时通讯有兴趣研究的朋友,希望我们能够共同进步,另一个就是希望能够帮助到需要即时通讯系统的朋友或者企业,可以直接使用或者…

java仿QQ聊天软件OIM艰辛之路

既然QQ能仿ICQ, 咱java也来个仿QQ.在我刚学完java后,就想做点什么项目锻炼下自己的技能。凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了。 然后他想让我也一块做这个,我心想,像qq这么高难…

oim-server-web打包测试环境不起作用问题 vue+typeScript

本人对前端只有个略懂 当我使用npm run test测试 alert(process.env.NODE_ENV)结果是正常能返回出 当我使用npm run build --test打包部署服务器后 返回的结果是 2021 04 25 暂时未找到解决方法 所以先冒着被同事孤立的风险用以下解决方法 修改前 class Config {private …

基于 JavaFX 开发的聊天客户端 OIM-即时通讯

OIM 详细介绍 一、简介 OIM是一套即时通讯的聊天系统,在这里献给大家,一方面希望能够帮助对即时通讯有兴趣研究的朋友,希望我们能够共同进步,另一个就是希望能够帮助到需要即时通讯系统的朋友或者企业,可以直接使用或…

electron-builder打包linux桌面程序(OIM-E多平台即时通讯软件)

1、OIM-E 开源主页 主页链接 2、打包Linux 开始踩了几个坑,我图简单因此尝试在windows打包linux包。结果就是不行,梯子啥的都挂了,结果无效。报如下错误: ⨯ Get https://service.electron.build/find-build-agent?no-cache1…

oim failed_对OIM Web(UI)层进行压力测试

oim failed Oracle IDM中的默认配置保留20个专用于服务前端(UI)请求的线程。 从根本上讲,这意味着应用程序服务器具有20个线程池,可用于为通过Web控制台(/ identity或/ sysadmin)访问OIM的用户提供服务。 对于Weblogic ,这是它的配置方式&…

oim(类QQ)开源项目源码阅读笔记(1)——登录部分

oim项目是码云上相当优秀的开源项目,项目完整,有客户端,服务器端web端,项目地址:https://gitee.com/oimchat 因为最近打算使用javafx写个客户端,所以看了一下该项目基于java的pc客户端源码,客户端项目如下…

聊聊开源聊天软件oim-fx

最近忽然要开发聊天软件,上网百度学习了一下。先是找到一些socket编程的文章。后来,在博客园找到这篇文章,得到一些启示:《超赞的8款开源聊天软件》 https://blog.csdn.net/huaairen/article/details/89006927 今天有点时间&…

java实例化对象的四种方式

java实例化对象的4种方式 用new 语句创建对象,这是最常用的创建对象方法。 package test;public class Father {public void print() {System.out.println("我是father");} public static void main(String[] args) {Father f new Father();f.print();…

java实例化对象的几种方式

这里一共整理了四种方法 ①用类的new ()创建 ②用clone方法创建, 需要类实现 Cloneable 接口 ③通过反射机制创建 ④将一个对象实例化后,进行序列化,再反序列化 下面是实现代码 1)用类的new &#xff…

详解C#实例化对象的三种方式及性能对比

前言 做项目过程中有个需求要实例化两万个对象并添加到List 中,这个过程大概需要1min才能加载完(传参较多),于是开启了代码优化之旅,再此记录。 首先想到的是可能实例化比较耗时,于是开始对每种实例化方式…

父类声明子类实例化对象详解

测试代码: public class Employee {public String name;public String getType(){return "Employee";}} public class Manager extends Employee{private int money;public String getType(){return "Manager";} }public static void main(St…

java实例化对象后面添加花括号的理解分析

java实例化对象后面添加花括号的理解分析 昨天在看MyBatis官方文档时看到这么一段代码 return new SQL() {{SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME");FROM("PERSON P");if (id ! null) {WHERE("P.ID like #{id}");}…

Unity 创建/实例化对象

在程序运行过程中创建、实例化对象物体需要用到Object类中的 Instantiate 函数,例如,我们场景中有一个物体A: 现在我们想要在场景中创建五个该物体,则用Instantiate函数将该物体作为参数传入: using UnityEngine;pu…

几种对象实例化方式详解

一)对象实例化常用方式 方式一:直接new一个对象,最常用的一种。 方式二:反射,通过Class.forName("类的全限定名")。 方式三:构造器,通过Class.forName("类的全限定名")&…

yolov5剪枝 实战

(1)步骤 剪枝的一般步骤只是在正常训练的后面加上了稀疏化训练和剪枝的步骤。 (2)稀疏化训练 主要区别 稀疏化训练的代码和正常训练的代码的差别主要体现在 ①反向传播 ②优化器 ③parse_opt代码 接下来从代码执行训练简单分析…