java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。
展開全部
//時間關系,粗略的做了一下,一個模擬UDP協議的測試,圖標,IP,以及端口都可以設成
//發送者端的電腦參數32313133353236313431303231363533e78988e69d8331333366306533!
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
for(int?j=0;j
for(int?x=0;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();
}
}
總結
以上是生活随笔為你收集整理的java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的复制订阅_如何删除发布与复制
- 下一篇: java 循环map 优雅写法_Java