📄 clientreceivethread.java
字号:
package com.softfz.jn0708.thread;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyledDocument;
import com.softfz.jn0708.chat.ChatFrame;
import com.softfz.jn0708.srcpackage.*;
/**
* 客户端接收线程
* @author admin
*
*/
public class ClientReceiveThread extends Thread {
private boolean tag = false;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private ChatFrame chatframe;
private SrcPackage revPackage = null;
private SrcPackage filerevPackage = null;
private HashMap map ;
private TCompany company ;
private JButton btnSave ;
private JButton btnNo ;
private JButton btnCancle;
private JProgressBar probar = new JProgressBar(0,100);
/**
* 构造函数
* @param ois 输入流
* @param oos 输出流
* @param chatframe 聊天主窗体
*/
public ClientReceiveThread(ObjectInputStream ois ,ObjectOutputStream oos, ChatFrame chatframe) {
super();
this.ois = ois;
this.oos = oos;
this.chatframe = chatframe;
probar.setValue(0);
probar.setStringPainted(true);
}
/**
* 线程的run方法
*/
public void run() {
while (!tag) {
try {
revPackage = (SrcPackage) ois.readObject();
// 上线包
if (revPackage.getType().equals(SrcPackage.UPLINE_TYPE)) {
if (!revPackage.getFrom().equals(chatframe.getUser().getUNO())){
try {
map = revPackage.getData();
company = (TCompany) map.get("COMPANY");
chatframe.getUserlistpanel().updateTree(company);
// 创建样式文档
StyledDocument lgchat= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
// 获取当前样式
SimpleAttributeSet style = new SimpleAttributeSet(); //当前时间
SimpleDateFormat loginTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = loginTime.format(new Date());
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
// 先在 chatInfoText 上写入一个名字号码及 发送的时间
lgchat.insertString(lgchat.getLength(),"【"+date+"】 "+revPackage.getTo()+" 上线了"+ "\n", style);
for (int i = 0; i < revPackage.getTo().length(); i++) {
// 设置文本插入符的位置
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(lgchat.getLength());
}
lgchat.insertString(lgchat.getLength(), "\n", style);
} catch (BadLocationException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
break;
}
}else{
map = revPackage.getData();
company = (TCompany) map.get("COMPANY");
chatframe.getUserlistpanel().updateTree(company);
}
//加载当前公告
chatframe.getJtpNote().setEnabled(true);
chatframe.getJtpNote().setText(revPackage.getTomeno());
chatframe.getJtpNote().setEnabled(false);
}
//接收聊天包
if (revPackage.getType().equals(SrcPackage.CHAT_TYPE)) {
HashMap map2 ;
List tmpList;
map2 = revPackage.getData();
tmpList = (List)map2.get("CHATCONTENT");
StyledDocument sdChatContent= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
SimpleDateFormat tiem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = tiem.format(new Date());
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
if(revPackage.getTomeno().equals("company")){
sdChatContent.insertString(sdChatContent.getLength(), "【"+date+"】"+" "+revPackage.getFrom()+" 对 "+revPackage.getTo()+" 的所有人说:" + "\n", style);
for (int i = 0; i < tmpList.size(); i++) {
// 设置文本插入符的位置
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
Object o = tmpList.get(i);
if (o instanceof Icon) {
chatframe.getChatcontent().getJtpchatcontent().insertIcon((ImageIcon) o);
} else if (o instanceof String) {
sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);
}
}
sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
int pos = chatframe.getChatcontent().getJtpchatcontent().getDocument().getLength();
chatframe.getChatcontent().getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
}else if (revPackage.getTo().equals(chatframe.getUser().getUTERM().trim())){
sdChatContent.insertString(sdChatContent.getLength(), "【"+date+"】"+" "+revPackage.getFrom()+" 对你说:" + "\n", style);
for (int i = 0; i < tmpList.size(); i++) {
// 设置文本插入符的位置
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
Object o = tmpList.get(i);
if (o instanceof Icon) {
chatframe.getChatcontent().getJtpchatcontent().insertIcon((ImageIcon) o);
} else if (o instanceof String) {
sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);
}
}
sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
int pos = chatframe.getChatcontent().getJtpchatcontent().getDocument().getLength();
chatframe.getChatcontent().getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
}else
if (revPackage.getTo().equals(chatframe.getUser().getDNAME()))
{
sdChatContent.insertString(sdChatContent.getLength(), "【"+date+"】"+" "+revPackage.getFrom()+" 对 "+revPackage.getTo()+" 的所有人说:" + "\n", style);
for (int i = 0; i < tmpList.size(); i++) {
// 设置文本插入符的位置
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
Object o = tmpList.get(i);
if (o instanceof Icon) {
chatframe.getChatcontent().getJtpchatcontent().insertIcon((ImageIcon) o);
} else if (o instanceof String) {
sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);
}
}
sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
int pos = chatframe.getChatcontent().getJtpchatcontent().getDocument().getLength();
chatframe.getChatcontent().getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
}
}
//下线包
if (revPackage.getType().equals(SrcPackage.DOWNLINE_TYPE)) {
HashMap map3 ;
if ((revPackage.getFrom().equals(SrcPackage.SERVER_ID) )&& (revPackage.getTo().equals(chatframe.getUser().getUNO()))){
try {
chatframe.getOis().close();
chatframe.getOos().close();
chatframe.getClientSocket().close();
chatframe.getReceiveThread().setTag(true);
JOptionPane.showMessageDialog(null, "您已和服务器断开连接!", "提示",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
} catch (IOException e1) {
// // TODO 自动生成 catch 块
// e1.printStackTrace();
System.out.println("已和服务器断开连接");
}
}
if ((revPackage.getFrom().equals(SrcPackage.SERVER_ID) )&& (!revPackage.getTo().equals(chatframe.getUser().getUNO()))){
map3 = revPackage.getData();
company = (TCompany) map3.get("COMPANY");
chatframe.getUserlistpanel().updateTree(company);
try {
StyledDocument sdChatContent= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
SimpleDateFormat tiem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = tiem.format(new Date());
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
sdChatContent.insertString(sdChatContent.getLength(), "【"+date+"】 "+revPackage.getTomeno()+"下线了" + "\n", style);
sdChatContent.insertString(sdChatContent.getLength(), "\n", style);
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
} catch (BadLocationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
// System.out.println(revPackage.getFrom());
// System.out.println(revPackage.getTomeno());
if(revPackage.getFrom().equals("SHUTDOWN") ){
map = revPackage.getData();
company = (TCompany) map.get("COMPANY");
chatframe.getUserlistpanel().updateTree(company);
JOptionPane.showMessageDialog(null, "您已和服务器断开连接!", "提示",JOptionPane.INFORMATION_MESSAGE);
// System.exit(0);
}
System.out.println("下线了");
}
// 公告包
if (revPackage.getType().equals(SrcPackage.NOTE_TYPE)) {
chatframe.getJtpNote().setEnabled(true);
chatframe.getJtpNote().setText(revPackage.getTomeno());
chatframe.getJtpNote().setEnabled(false);
}
//密码修改验证包
if (revPackage.getType().equals(SrcPackage.OK_PWD_TYPE)) {
if (revPackage.getTomeno().equals("Y")){
JOptionPane.showMessageDialog(null, "密码修改成功!", "提示",JOptionPane.INFORMATION_MESSAGE);
chatframe.getToppanel().getSetpwd().dispose();
}else if(revPackage.getTomeno().equals("N")){
JOptionPane.showMessageDialog(null, "密码修改失败!", "提示",JOptionPane.INFORMATION_MESSAGE);
}
}
//文件发送询问包
if (revPackage.getType().equals(SrcPackage.FILESEND_TYPE)) {
System.out.println("send 询问");
if(revPackage.getTo().equals(chatframe.getUser().getUNO())){
//创建样式文档
StyledDocument content= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
// 获取当前样式
SimpleAttributeSet style = new SimpleAttributeSet(); //当前时间
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
List filedata = (ArrayList)revPackage.getData().get("FILECONTENT");
String fileName = (String) filedata.get(0);
String fileLength = (String) filedata.get(1);
btnSave = new JButton("另存为");
btnNo = new JButton("拒绝");
content.insertString(content.getLength(), revPackage.getTomeno()+ " 要给您发送文件 \"" + fileName
+ "(" + fileLength + " k)\"您是要 ", style);
MyActionListener myactionlistener = new MyActionListener();
btnSave.setBorder(null);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -