/* * 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日