QQ聊天室多线程即时通讯代码全.docx
《QQ聊天室多线程即时通讯代码全.docx》由会员分享,可在线阅读,更多相关《QQ聊天室多线程即时通讯代码全.docx(23页珍藏版)》请在冰豆网上搜索。
QQ聊天室多线程即时通讯代码全
聊天室----多线程即时通讯程序(完整代码):
运行步骤:
1、将所有的文件在控制台编译一下
2、先运行server(服务器)文件
3、再运行login登陆界面
4、然后自己操作一下就OK了
G_Menu.java程序
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.border.*;
import.*;
importjava.io.*;
classG_MenuextendsJFrameimplementsActionListener
{
JFramejf=newJFrame("聊天室");
publicSocket_onesoc;
publicPrintWriterpw;
publicJPaneljp1=newJPanel();
publicJPaneljp2=newJPanel();
publicJPaneljp3=newJPanel();
publicJPaneljp4=newJPanel();
publicJPaneljp5=newJPanel();
publicJPaneljp6=newJPanel();
publicJPaneljp7=newJPanel();
publicstaticJTextAreajta1=newJTextArea(12,42);
publicstaticJTextAreajta2=newJTextArea(12,42);
publicJLabeljl1=newJLabel("对");
publicstaticJComboBoxjcomb=newJComboBox();
publicJCheckBoxjcb=newJCheckBox("私聊");
publicJTextFieldjtf=newJTextField(36);
publicJButtonjb1=newJButton("发送>>");
publicJButtonjb2=newJButton("刷新");
publicstaticDefaultListModellistModel1;
publicstaticJListlst1;
publicStringna;
publicStringse;
publicStringmessage;
publicvoidgetMenu(Stringname,Stringsex)//显示聊天界面
{
jcomb.addItem("所有人");
this.na=name;
this.se=sex;
jta1.setEditable(false);
jta2.setEditable(false);
listModel1=newDefaultListModel();
lst1=newJList(listModel1);
lst1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
lst1.setVisibleRowCount(18);
lst1.setFixedCellHeight(28);
lst1.setFixedCellWidth(100);
JScrollPanejsp1=newJScrollPane(jta1);
JScrollPanejsp2=newJScrollPane(jta2);
JScrollPanejsp3=newJScrollPane(lst1);
jsp3.setBorder(newTitledBorder("好友列表"));
jsp1.setBorder(newTitledBorder("主聊天频道"));
jsp2.setBorder(newTitledBorder("我的频道"));
jp1.setLayout(newGridLayout(2,1));
jp1.add(jsp1);
jp1.add(jsp2);
jp2.setLayout(newFlowLayout(FlowLayout.LEFT));
jp2.add(jl1);
jp2.add(jcomb);
jp2.add(jcb);
jp3.setLayout(newFlowLayout(FlowLayout.LEFT));
jp3.add(jtf);
jp3.add(jb1);
jp4.setLayout(newGridLayout(2,1));
jp4.add(jp2);
jp4.add(jp3);
jp5.setLayout(newBorderLayout());
jp5.add(jp1,BorderLayout.NORTH);
jp5.add(jp4,BorderLayout.SOUTH);
jp6.setLayout(newBorderLayout());
jp6.add(jsp3,BorderLayout.NORTH);
jp6.add(jb2,BorderLayout.SOUTH);
jp7.setLayout(newFlowLayout(FlowLayout.LEFT));
jp7.add(jp5);
jp7.add(jp6);
jf.add(jp7);
jf.setLocation(200,200);
jf.setSize(700,650);
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
jf.setVisible(true);
jb1.addActionListener(this);
jb2.addActionListener(this);
jta1.setLineWrap(true);
jta2.setLineWrap(true);
jsp1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jsp1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jsp2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jsp2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jsp3.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jsp3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jf.pack();
}
publicvoidsock()
{try{
Stringuser=na+"("+se+")";//将用户信息保存成字符串形式
soc=newSocket_one(user);//创建客户端对象
pw=newPrintWriter(soc.socket.getOutputStream());//创建输出流
pw.println("1008611");//发送好友列表标识
pw.println(na+":
"+se);//发送用户信息
pw.flush();
pw.println("10086");//发送进入聊天室标识
pw.println("【"+na+"】"+"进入聊天室");//发送进入聊天室信息
pw.flush();
}catch(Exceptionex){
ex.printStackTrace();
}
}
publicG_Menu(){//设置窗口关闭事件,如果点击窗口右上角叉号关闭,执行下边程序
jf.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
try{
pw=newPrintWriter(soc.socket.getOutputStream());
pw.println("456987");//发送下线标识
pw.println(na+":
离开聊天室");//发送下线信息
pw.flush();
jf.dispose();//关闭窗口
}catch(Exceptionex){
}
}
}
);
}
publicvoidactionPerformed(ActionEventevent)//事件触发
{
jb1.setText("发送>>");
jb2.setText("刷新");
try{
pw=newPrintWriter(soc.socket.getOutputStream());
if(event.getActionCommand().equals("发送>>"))//点击发送触发
{
if(!
jtf.getText().equals(""))
{
if(jcb.isSelected())
{
Stringname1=(String)jcomb.getSelectedItem();
message="悄悄话"+na+"("+se+")"+"对"+name1+"说:
"+jtf.getText();
pw.println("841163574");//发送私聊标识
pw.println(na+":
"+name1+"1072416535"+message);//发送私聊信息
pw.flush();
}
else{
pw.println("10010");//发送聊天标识
pw.println(na+"说:
"+jtf.getText());//发送聊天信息
pw.flush();
}
}
}
elseif(event.getActionCommand().equals("刷新"))//点击刷新触发
{
pw=newPrintWriter(soc.socket.getOutput