GUI多线程聊天室
实现下面的功能
项目总结
- 主要就是三个按纽的功能,实现了"连接"和"发送"后,基本就大功造成了
- 画图时"用户列表"用JList列表来实现
- 在连接完成后,就要开启一个线程,来"接收消息"
- 定时器实时监听,聊天消息的条数,是否超标
- 客户端和服务端的代码,耦合度极高,可以写在一个类中
客户端
package com.li.changGe.datagramSocketChatroom;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Vector;
public class Client extends JFrame implements Runnable, ActionListener {
//经常用到的变量
private volatile DatagramSocket socket = null;
private volatile DatagramPacket packet = null;
private InetAddress inetAddress = null;
private String message = null;
//----------------------------------------------------------
/**
* 定时器对象,
* 每隔100毫秒扫描一次全局,
* 并执行一遍actionPerformed()
* -----------------------------------
*
* 需要传入,一个实现了ActionListener的对象
*
* this就是:扫描当前对象
*/
private Timer timer = new Timer(100,this);
//------------------------------------------------------------
//用于用户列表,和聊天框显示消息
private Vector listVector = new Vector();
private Vector<String> chatBocVector = new Vector();
private JList list = new JList();
private JList chatBox = new JList();
//----------------------------------------------------
//基本属性,创建对象时传入
private String ip;
private String port;
private String name;
private volatile String username;
private int takePort;
//-----------------------------------------------------------
public Client(){
}
public Client(String ip,String port,int takePort,String username,String name){
this.ip = ip;
this.port = port;
this.takePort = takePort;
this.username = username;
this.name = name;
}
//-----------------------------------------------------------------------
public static void main(String[] args) throws Exception{
new Client("127.0.0.1","8081",9999,"长歌","客户端").init();
}
//---------------------------------------------------------
//初始化时得到name,后续作代码判断
public void init() throws Exception{
setTitle(name);
boolean isName = name.equals("客户端");