JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题:

现在每登录一个人,后面的人是能看到前面的登录的人的;

但是,前面的人看不到后面的人登录;

//后面每登录一个人,有责任去通知前面登录的人他已经上线了;

通知了完以后,需要更改好友在线的情况;

//不让同一个账号反复登录

//如果 好友不在线,则不能聊天

================================

[ManageQqChat.java]

/**
* 这是一个管理用户聊天界面的类
*/
package com.qq.client.tools;

import java.util.HashMap;
import com.qq.client.view.QqChat;

public class ManageQqChat {
private static HashMap hm=new HashMap<String,QqChat>();

//加入
public static void addQqChat(String loginIdAndFriendId,QqChat qqChat){
hm.put(loginIdAndFriendId, qqChat);
}
//取出
public static QqChat getQqChat(String loginIdAndFriendId){
return (QqChat)hm.get(loginIdAndFriendId);
}
}

20

1

/**

2

 * 这是一个管理用户聊天界面的类

3

 */

4

package com.qq.client.tools;

5

 

6

import java.util.HashMap;

7

import com.qq.client.view.QqChat;

8

 

9

public class ManageQqChat {

10

    private static HashMap hm=new HashMap<String,QqChat>();

11

   

12

    //加入

13

    public static void addQqChat(String loginIdAndFriendId,QqChat qqChat){

14

        hm.put(loginIdAndFriendId, qqChat);

15

    }

16

    //取出

17

    public static QqChat getQqChat(String loginIdAndFriendId){

18

        return (QqChat)hm.get(loginIdAndFriendId);

19

    }

20

}

***************************************************************

[ManageQqFriendList.java]

/**
* 管理qq好友、陌生人、黑名单界面类
*/
package com.qq.client.tools;

import java.util.HashMap;
import com.qq.client.view.QqFriendList;

public class ManageQqFriendList {
private static HashMap hm=new HashMap<String,QqFriendList>();
//加入
public static void addQqFriendList(String qqid,QqFriendList qqFriendList){
hm.put(qqid, qqFriendList);
}
//取出
public static QqFriendList getQqFriendList(String qqId){
return (QqFriendList)hm.get(qqId);
}
}

19

1

/**

2

 * 管理qq好友、陌生人、黑名单界面类

3

 */

4

package com.qq.client.tools;

5

 

6

import java.util.HashMap;

7

import com.qq.client.view.QqFriendList;

8

 

9

public class ManageQqFriendList {

10

    private static HashMap hm=new HashMap<String,QqFriendList>();

11

    //加入

12

    public static void addQqFriendList(String qqid,QqFriendList qqFriendList){

13

        hm.put(qqid, qqFriendList);

14

    }

15

    //取出

16

    public static QqFriendList getQqFriendList(String qqId){

17

        return (QqFriendList)hm.get(qqId);

18

    }

19

}

***************************************************************

com.qq.common

[Message.java]

/**
* 为Message规定规则
*/
package com.qq.common;

import java.io.Serializable;

public class Message implements Serializable{
private String mesType;
private String sender;
private String getder;
private String con;
private String sendTime;

public String getGetder() {
return getder;
}
public void setGetder(String getder) {
this.getder = getder;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getCon() {
return con;
}
public void setCon(String con) {
this.con = con;
}
public String getSendTime() {
return sendTime;
}
public void setSendTime(String sendTime) {
this.sendTime = sendTime;
}
public String getMesType() {
return mesType;
}
public void setMesType(String mesType) {
this.mesType = mesType;
}
}

45

1

/**

2

 * 为Message规定规则

3

*/

4

package com.qq.common;

5

 

6

import java.io.Serializable;

7

 

8

public class Message implements Serializable{

9

    private String mesType;

10

    private String sender;

11

    private String getder;

12

    private String con;

13

    private String sendTime;

14

   

15

    public String getGetder() {

16

        return getder;

17

    }

18

    public void setGetder(String getder) {

19

        this.getder = getder;

20

    }

21

    public String getSender() {

22

        return sender;

23

    }

24

    public void setSender(String sender) {

25

        this.sender = sender;

26

    }

27

    public String getCon() {

28

        return con;

29

    }

30

    public void setCon(String con) {

31

        this.con = con;

32

    }

33

    public String getSendTime() {

34

        return sendTime;

35

    }

36

    public void setSendTime(String sendTime) {

37

        this.sendTime = sendTime;

38

    }

39

    public String getMesType() {

40

        return mesType;

41

    }

42

    public void setMesType(String mesType) {

43

        this.mesType = mesType;

44

    }

45

}

***************************************************************

[MessageType.java]

/**
* 定义消息包的种类的接口
*/
package com.qq.common;

public interface MessageType {
String message_succeed="1";//登录成功包
String message_login_fail="2";//登录失败包
String message_comm_mes="3";//普通消息包
String message_get_onLineFriend="4";//要求在线的好友包
String message_ret_onLineFriend="5";//返回在线好友包
}

12

1

/**

2

 * 定义消息包的种类的接口

3

 */

4

package com.qq.common;

5

 

6

public interface MessageType {

7

    String message_succeed="1";//登录成功包

8

    String message_login_fail="2";//登录失败包

9

    String message_comm_mes="3";//普通消息包

10

    String message_get_onLineFriend="4";//要求在线的好友包

11

    String message_ret_onLineFriend="5";//返回在线好友包

12

}

***************************************************************

[User.java]

/**
* 这是用户信息类
*/
package com.qq.common;

import java.io.Serializable;
public class User implements Serializable{
private String userId;
private String passwd;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}

22

1

/**

2

 * 这是用户信息类

3

 */

4

package com.qq.common;

5

 

6

import java.io.Serializable;

7

public class User implements Serializable{

8

    private String userId;

9

    private String passwd;

10

    public String getUserId() {

11

        return userId;

12

    }

13

    public void setUserId(String userId) {

14

        this.userId = userId;

15

    }

16

    public String getPasswd() {

17

        return passwd;

18

    }

19

    public void setPasswd(String passwd) {

20

        this.passwd = passwd;

21

    }

22

}

***************************************************************

至此,韩顺平JAVA入门到精通(全94讲)视频到此完结。

笔记包含完整的视频PPT内容,及所有演示示例代码,和视频中所有作业答题。

学习注意:

视频教学内容简单易学,容易上手。对于JAVASE的内容讲解通俗易懂,不过深度不高,讲的较为浅显。主要是让学员对JAVASE有所了解,本人对视频印象深刻的为在企业开发中的注意事项,及开发软件的规则。对于需要全面了解学习JAVA的朋友来说,还需研读更深、更全面的JAVA书籍,及JAVA编程思想。从而对JAVA有全面的认识。

韩顺平讲师的后续视频笔记,将陆续放出。

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/xuxaut-558/p/10047924.html

时间: 2024-10-10 21:39:20

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示的相关文章

JAVA入门到精通-第93讲-山寨QQ项目7-好友在线提示

-显示聊天信息 -用一个类来管理聊天界面,放到HashMap里面: QqChat放到一个类里面进行管理: HashMap管理就是引用了一下: ManageQqChat类对显示来说非常重要了: ------------------------- -好友在线提示  在线-头像彩色:  不在线-头像灰色: 只有服务器才能知道谁在线.谁不在线: -QqFriendList -默认只有自己在线,别人不在线: -1/4应该知道互相在线 -思路:当一个用户登录成功后,就向服务器发送一个要求  返回在线好友的包

JAVA入门到精通-第92讲-山寨QQ项目6-多对多的聊天

QQ聊天项目演示-多对多的聊天 流同时并发的异常: 服务器中转 2/3号只有一个连接: 接收信息:while循环不停地读取: 当1号点开两个窗口时,2/3会共同去争取这个socket: 会出现流同时并发异常: Socket处理成static不太合理: 启动一个窗口就会占据Socket不放: ------------- -实现真正的多人聊天,互相不出现错误 -每一个登录的账号独享一份socket -去掉static 当一个链接达成的时候, 启动线程, 和服务器保持通讯的状态: 做一个类来管理客户端

JAVA入门到精通-第32讲-swing编程实战

 JBorderLayout,左边是JList,拆分窗格: 图片是放在JLabel上的,图片的地址写好就行:  在相关项目下面建立一个文件夹Folder,放置图片:或者复制粘贴:   拆分:水平拆分?垂直拆分?    拆分之后把jList和jl1这两个组件放进去: 可以伸缩:  在窗口左上角出现自己的图标? Border布局: 多行文本框带滚动条,聊天窗口可滚动:   加入QQ左上角图标:      转成图片,getImage; Border布局很有用, CENTER会被自动挤满:  QQ号码.

JAVA入门到精通-第33讲-绘图技术.坦克大战1

    用的是Access数据库,安全性不够好,性能也不够强大:   躲在这里,坦克很少过来,做了一个随机数: 把得分的记录保存在数据库里面: SQLServer2005中型数据库:    (x,y)坐标:     800x600:     表示计算机屏幕上的每一行由800个点组成,共有600行:   共有480000个像素:   java绘图技术:   绘图一般在JPane上画: 覆盖JPanel的paintat方法 Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔 supe

JAVA入门到精通-第72讲-学生管理系统4-model 2模式(1)

删除.查询.添加.修改: -修改: 每个字段都可能修改: //给?赋值 //在prepareStatement语句后面赋值才好用 //修改完了,更新数据 目前为止,已经完成了增删改查-Model1模式 最大特点: 界面和业务逻辑操作是放在一起的: 优点:简单,开发方便: 缺点:代码复用性不高: 中大型项目可读性差,可维护性不高: 前台后端混杂在一起的: 比如:"数据库密码换了, 所有涉及到数据库的地方都需要发生变化" =================================

JAVA入门到精通-第36讲-事件监听-坦克大战4

Java事件处理机制:  事件源:事件:事件监听者:事件处理方法:  任何一个类,只要实现了相应的接口,就可以去监听某个事件源: 一个类要实现监听的基本步骤:  a.实现相应的接口[KeyListener,MouseListener,ActionListener,WindowListener] b.把接口的处理方法根据需要重新编写(override) c.在事件源注册监听 d.事件传递是靠事件对象 通过ActionEvent传递事件: 通过事件进行委派事件模型进行事件处理:  一个事件源可能会生

JAVA入门到精通-第31讲-常见组件

面板组件-Jpanel  一个JFrame,多个JPanel: JPanel默认是流布局:FlowLayout:  通过JPanel达到复杂布局的目的:  可以认为是网格布局,有3个JPanel:2个Label:2个按钮: 一个密码框和一个文本输入框:   最终展现出来的还是靠JFrame展现的  网格布局好点,3个JPanel,用流布局,控件往里加: ButtonGroup按钮组:一组里面只能选择一个:    对单选框管理,就是把它加入到ButtonGroup里面: 单选框也是一个个放进JPa

JAVA入门到精通-第70讲-学生管理系统2-增删改

-完成一个mini版本学生管理系统 jude软件:很好使的,安装一下就可以用了: -学生管理系统的添加 .修改.删除.上下页分页 ---------------------------------------------- 上面是一个流布局,JPanel 下面是一个流布局,JPanel 中间是Border布局,边界布局,CENTER JTextField jtf; 先加JLable--->Jtf文本域->JButton按钮 ------------------------- mis 系统:信息

JAVA入门到精通-第46讲-IO编程.记事本开发

IO编程-记事本开发 fis.read(bytes) 字节数组: 通过fis把文件里面的1800个字符,尽可能的读, 最多读1024个.记录一下,0-1024记录到bytes; 再去读的首,fis.read试图1024个字节,不够了, 第二次读了776个,n=776:(0,776): 第三次,又准备读1024,这次一个读不到,返回-1: 退出循环: JMenuBar 菜单条是一个JMenuBar: JMenu File是一个JMenu; JMenuItem 下面这些选项是JMenuItem; 一