首页>代码>Java基于swing的学院管理系统>/EndDom/src/cn/com/cssve/chat/Client.java
/*
 * Client.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.com.cssve.chat;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import cn.com.zh.entity.User;
import cn.com.zh.ui.MainFrame;

public class Client extends javax.swing.JFrame {

	Socket socket;
	String clientName;

	private PrintWriter out;
    User u;
	public Client(Socket socket, String name,User u) {
		this.socket = socket;
		this.clientName = name;
		this.u=u;
		setTitle("欢迎【" + name + "】来到无聊【聊天室】");
		initComponents();
		new ChatThread(socket).start();
		
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				setVisible(false);
			}
		});
	}

	//会话层
	class ChatThread extends Thread {
		private Socket socket;

		public ChatThread(Socket socket) {
			this.socket = socket;
		}

		@Override
		public void run() {
			try {
				out = new PrintWriter(socket.getOutputStream(), true);
				BufferedReader br = new BufferedReader(new InputStreamReader(
						socket.getInputStream()));
				new GetThread(br).start();
				out.println(clientName);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	//获取信息
	class GetThread extends Thread {
		private BufferedReader br;

		public GetThread(BufferedReader br) {
			this.br = br;
		}

		@Override
		public void run() {
			try {
				while (true) {
					String msg = br.readLine();
					System.out.println(msg);
					//判断服务器是否已经关闭,或者被踢出来
					if (msg == null) {
						break;
					}
					if (msg.startsWith("list:")) {
						DefaultListModel dlm = new DefaultListModel();
						String list = msg.substring(5);
						StringTokenizer st = new StringTokenizer(list, "[,]");
						System.out.println(st);
						while (st.hasMoreTokens()) {
							dlm.addElement(st.nextToken());
						}
						jList1_user.setModel(dlm);
					} else {
						SimpleDateFormat sdf = new SimpleDateFormat(
								"yyyy年MM月dd日  HH:mm:ss");
						String getTime = sdf.format(new Date());
						jTextArea1.append(getTime+"\n"+msg + "\n");
					}
				}
			} catch (IOException e) {
			} finally {
				JOptionPane
						.showMessageDialog(
								null,
								"<html>与主机失去联系!发生错误的原因可能有:<br>①您的昵称已经存在,请更改<br>②服务器已经关闭,请等待服务器重新启动<br>③您被管理员踢出来了!请注意遵守聊天室规则</html>");
//				new ChatLoginInterface().setVisible(true);
				Client.this.dispose();
			}
			
		}
	}

	//GEN-BEGIN:initComponents
	// <editor-fold defaultstate="collapsed" desc="Generated Code">
	private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jList1_user = new javax.swing.JList(new DefaultListModel<>());
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jTextField_import = new javax.swing.JTextField();
jButton_send = new javax.swing.JButton();
jComboBox1 = new javax.swing.JComboBox();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBackground(new java.awt.Color(204, 255, 204));

jList1_user.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0), "\u7528\u6237\u5217\u8868", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("楷体", 1, 14)));
jList1_user.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jList1_user.setDebugGraphicsOptions(javax.swing.DebugGraphics.NONE_OPTION);
jScrollPane1.setViewportView(jList1_user);

jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane2.setViewportView(jTextArea1);

jButton_send.setText("\u53d1  \u9001");
jButton_send.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton_sendActionPerformed(evt);
}
});

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "群      聊", "私      聊" }));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jTextField_import, javax.swing.GroupLayout.PREFERRED_SIZE, 357, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton_send)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jScrollPane2)))
.addContainerGap(22, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(24, 24, 24)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField_import, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_send)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(31, Short.MAX_VALUE))
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);

pack();
}
	//点击发送按钮
	private void jButton_sendActionPerformed(java.awt.event.ActionEvent evt) {
		String text = jTextField_import.getText().trim();
		//在下一次输入的时候将输入框清空
		jTextField_import.setText("");
		if (text.equals("")) {
			JOptionPane.showMessageDialog(null, "发送的消息不能为空,请输入内容之后再发送!");
		}else{
			// 获得发送消息的类型
			int index=jComboBox1.getSelectedIndex();
			if (index==0) {//群聊
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
				String getTime = sdf.format(new Date());
				out.println(clientName + ":all:" + text);
//				jTextArea1.append(getTime+"\n"+clientName+"对所有人说:"+text+"\n");
			}else{//私聊
				int item = jList1_user.getSelectedIndex();
				if (item==-1) {
				   JOptionPane.showMessageDialog(null, "私聊必须选择一个用户");
				}else{
					String name = jList1_user.getSelectedValue().toString();
					if (name.equals(clientName)) {
						 JOptionPane.showMessageDialog(null, "您不能和自己私聊");
						 jTextField_import.setText("");
					}else{
						SimpleDateFormat sdf = new SimpleDateFormat(
								"yyyy年MM月dd日  HH:mm:ss");
						String getTime = sdf.format(new Date());
					jTextArea1.append(getTime+"\n"+clientName + "对" + name + "说:"+text);
					out.println(clientName + ":" + item + ":" + text);
					}
				}
			}
		}
	}

	//	public static void main(String args[]) {
	//		java.awt.EventQueue.invokeLater(new Runnable() {
	//			public void run() {
	////				new Client().setVisible(true);
	//			}
	//		});
	//	}

	//GEN-BEGIN:variables
	// Variables declaration - do not modify
	private javax.swing.JButton jButton_send;
	private javax.swing.JComboBox jComboBox1;
	private javax.swing.JList jList1_user;
	private javax.swing.JPanel jPanel1;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JScrollPane jScrollPane2;
	private javax.swing.JTextArea jTextArea1;
	private javax.swing.JTextField jTextField_import;
	// End of variables declaration//GEN-END:variables

}
最近下载更多
sunshine9920  LV12 2023年10月22日
rain112  LV30 2022年6月16日
testuser1234567  LV24 2022年5月31日
ming_123_9715  LV23 2022年5月3日
rodert  LV14 2022年4月29日
wangxin199804  LV9 2022年4月3日
wyx065747  LV67 2022年4月2日
978806986  LV16 2022年3月24日
543666826  LV33 2022年3月12日
qianzf  LV12 2021年12月22日
最近浏览更多
akittyboy  LV9 3月22日
jiayongchao258  LV9 2023年12月28日
磊哥哥哥哥  LV13 2023年12月26日
求学的熊猫  LV6 2023年12月25日
lshlsh 2023年12月25日
暂无贡献等级
shiaomon 2023年12月14日
暂无贡献等级
fesfefe  LV13 2023年11月25日
李朝磊  LV18 2023年11月18日
zm111326  LV1 2023年10月25日
sunshine9920  LV12 2023年10月22日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友