Java做一个多线程类似于QQ的聊天程序。

各位大佬帮帮忙... 各位大佬帮帮忙 展开
 我来答
百毒千毒
2018-12-19 · TA获得超过4737个赞
知道大有可为答主
回答量:2504
采纳率:88%
帮助的人:661万
展开全部
//时间关系,粗略的做了一下,一个模拟UDP协议的测试,图标,IP,以及端口都可以设成
//发送者端的电脑参数!
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.io.Serializable;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Day03_A extends JFrame implements Serializable {
private static final long serialVersionUID = 57L;
private JTextArea txtRece, txtSend;// 接受与发送文本域!
private JPanel jp1, jp2;// 面板!
private JScrollPane jsp;
private JLabel jab;// 标签
private JButton jb;// 按钮
private JMenuBar jmb;// 窗体状态栏
private JMenuItem a=null,b=null;
private DatagramSocket dsend = null, drece;
private DatagramPacket dp1, dp2;
private byte[] by1, by2;
private String[][][] menArr= {{{"语言"},{"中文","英文"}}, {{"字体"},{"隶书","彩云",}},{{"辅助"},{"放大","缩小"}}, {{"功能"},{"计算","闹钟"}}};

Day03_A() {
by2 = new byte[1024];
this.setTitle("山寨QQ测试");// 窗体标题
this.setBounds(300, 300, 400, 500);// 位置及大小!
this.setResizable(false);
this.setIconImage(new ImageIcon("E:/Java_Worker/Day_41学习_Gui/src/com/djw/swing01/qq.png").getImage());
this.setLayout(new GridLayout(2, 1));// 网格模式2行1列
init();
this.setJMenuBar(jmb);
this.setVisible(true);
}
private void init() {
jmb = new JMenuBar();
for(int i=0;i<menArr.length;i++) {
for(int j=0;j<menArr[i].length;j++) {
for(int x=0;x<menArr[i][j].length;x++) {
if(j==0) {
a=new JMenu(menArr[i][j][x]);
}else {
b=new JMenuItem(menArr[i][j][x]);
a.add(b);
}
}
jmb.add(a);
}
}
jp1 = new JPanel();
jp1.setLayout(new BorderLayout());
txtRece = new JTextArea();
jsp = new JScrollPane(txtRece);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(jsp);
jp2 = new JPanel();// 面板
jp2.setBackground(new Color(107, 197, 127));
jp2.setLayout(new BorderLayout());
txtSend = new JTextArea();
jab = new JLabel();
jab.setText("[ALT+S]/[回车+CTRL]或者[点击发送按钮]:发送信息");
jab.setHorizontalAlignment(JLabel.CENTER);// 标签文本居中
jb = new JButton("发送");
jp2.add(jab, BorderLayout.NORTH);// 指定到面板北面
jp2.add(txtSend, BorderLayout.CENTER);// 文本放中间
jp2.add(jb, BorderLayout.SOUTH);
this.add(jp2);
myeve();
}
private void myeve() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗体可关闭
try {
dsend = new DatagramSocket();// 发送端套接字
drece = new DatagramSocket(10008);
} catch (SocketException e) {
e.printStackTrace();
}
re();// 启动无限循环侦听!
txtSend.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent k) {
if (k.isControlDown() && k.getKeyCode() == KeyEvent.VK_ENTER) {
se();
}
if (k.isAltDown() && k.getKeyCode() == KeyEvent.VK_S) {
se();
}
}
});
jb.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0) {
se();
txtSend.requestFocus();
}
});
}
private void se() {
try {
by1 = txtSend.getText().getBytes();
dp1 = new DatagramPacket(by1, by1.length, InetAddress.getByName("192.168.2.4"), 10008);
dsend.send(dp1);// 推送数据
txtSend.setText(null);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void re() {
new Thread() {
public void run() {
while (true) {
try {
String time = new SimpleDateFormat("MM-dd/HH:mm").format(new Date());
dp2 = new DatagramPacket(by2, by2.length);
drece.receive(dp2);
String ip = dp2.getAddress().getHostAddress();
txtRece.append("用户IP:" + ip + "  时间:");
txtRece.append(time + ": " + System.getProperty("line.separator"));
txtRece.append(new String(by2, 0, dp2.getLength()) + System.getProperty("line.separator"));
txtRece.setCaretPosition(txtRece.getText().length());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
public static void main(String[] args) {
new Day03_A();
}

}

潘某棋ao
2018-12-19
知道答主
回答量:20
采纳率:0%
帮助的人:1.5万
展开全部
可以的,聊聊如何?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鞠婧祎老婆柠祎
2018-12-18 · TA获得超过727个赞
知道小有建树答主
回答量:2416
采纳率:67%
帮助的人:414万
展开全部

有的的,java swing做的,跟qq非常像。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友762f74c
2018-12-18 · 超过66用户采纳过TA的回答
知道小有建树答主
回答量:303
采纳率:52%
帮助的人:51.4万
展开全部
这个可以有哦,私聊我吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神牛码农
2018-12-18 · 用技术行走在移动互联网时代
神牛码农
采纳数:297 获赞数:1178

向TA提问 私信TA
展开全部
有什么语言可以直接我的头像个人简介即可
追答
有什么需要直接与我沟通
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 4条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式