📄 clientreceivethread.java
字号:
btnSave.setActionCommand("save");
btnSave.addActionListener(myactionlistener);
btnNo.setBorder(null);
btnNo.setActionCommand("no");
btnNo.addActionListener(myactionlistener);
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(content.getLength());
chatframe.getChatcontent().getJtpchatcontent().insertComponent(btnSave);
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(content.getLength());
chatframe.getChatcontent().getJtpchatcontent().insertComponent(btnNo);
content.insertString(content.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.FILEREV_TYPE)) {
List data = (List) revPackage.getData().get("CONTENT");
// 确认接收
if (data.get(0).equals("Y")) {
try {
Socket CSocket = new Socket(data.get(1).toString(), Integer.parseInt(data.get(2).toString()));
String tUNO = revPackage.getTo();
String fUNO = revPackage.getFrom();
if (CSocket != null) {
// 创建线程
FileSendThread fileSendThread = new FileSendThread(fUNO, tUNO, CSocket,this);
fileSendThread.start();
// 创建样式文档
StyledDocument content= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
// 获取当前样式
SimpleAttributeSet style = new SimpleAttributeSet();
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(content.getLength());
chatframe.getChatcontent().getJtpchatcontent().insertComponent(probar);
content.insertString(content.getLength(), "\n\n", style);
int pos = chatframe.getChatcontent().getJtpchatcontent().getDocument().getLength();
chatframe.getChatcontent().getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
} else if (data.get(0).equals("N")) {
// 确认拒绝
StyledDocument content = chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
String fileName = ((ArrayList) revPackage.getData().get("CONTENT")).get(1).toString();
try {
content.insertString(content.getLength(), "您拒绝接收文件 \""
+ fileName + "\" \n\n", style);
} catch (BadLocationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
}
}
//文件发送完接收
if (revPackage.getType().equals(SrcPackage.FILEEND_TYPE)) {
if(revPackage.getTo().equals(chatframe.getUser().getUNO())){
StyledDocument content = chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
try {
content.insertString(content.getLength(), "文件已经保存到目录: \""+ FilePath.FileRevPath + "\" \n\n", style);
} catch (BadLocationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
}else{
StyledDocument content = chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
try {
content.insertString(content.getLength(), "文件发送,成功完成!" + "\n", style);
} catch (BadLocationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
}
}
} catch (IOException e) {
// TODO 自动生成 catch 块
// e.printStackTrace();
// JOptionPane.showMessageDialog(null, "服务器已断开!", "提示",JOptionPane.INFORMATION_MESSAGE);
// System.exit(0);
tag=true;
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
System.out.println("error");
// e.printStackTrace();
tag=true;
} catch (BadLocationException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
class MyActionListener implements ActionListener {
private FileReceiveThread filerevThread;
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("save")){
JFileChooser filesave = new JFileChooser();
if (filesave.showDialog(chatframe, "另存为:") == JFileChooser.APPROVE_OPTION) {
File file = filesave.getSelectedFile();
FilePath.FileRevPath = file.getAbsolutePath();
}
// 创建ServerSocket
try {
ServerSocket serverSocket = new ServerSocket(5599);
// 创建线程
if (serverSocket != null) {
filerevThread = new FileReceiveThread(serverSocket,chatframe);
filerevThread.start();
}
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
// 发文件确认包
SrcPackage filerevPackage = new SrcPackage();
filerevPackage.setFrom(revPackage.getFrom());
filerevPackage.setTo(revPackage.getTo());
filerevPackage.setType(SrcPackage.FILEREV_TYPE);
List OKList = new ArrayList();
OKList.add("Y");
String IP = null;
try {
IP = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e2) {
// TODO 自动生成 catch 块
e2.printStackTrace();
}
int port = filerevThread.getServerSocket().getLocalPort();
OKList.add(IP);
OKList.add(String.valueOf(port));
HashMap data = new HashMap();
data.put("CONTENT", OKList);
filerevPackage.setData(data);
try {
oos.writeObject(filerevPackage);
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
MyActionListener myactionlistener = new MyActionListener();
//创建样式文档
StyledDocument content= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
// 获取当前样式
SimpleAttributeSet style = new SimpleAttributeSet(); //当前时间
try {
content.insertString(content.getLength(),"您同意了接收文件 \""+ ((List) revPackage.getData().get("FILECONTENT")).get(0).toString()+ "\"正在建立连接,如果要中止接收文件,请按 ", style);
btnCancle = new JButton();
btnCancle.setBorder(null);
btnCancle.setActionCommand("cancle");
btnCancle.addActionListener(myactionlistener);
chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(content.getLength());
chatframe.getChatcontent().getJtpchatcontent().insertComponent(btnCancle);
content.insertString(content.getLength(), "\n\n", style);
} catch (BadLocationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
btnSave.setEnabled(false);
btnNo.setEnabled(false);
}
if(e.getActionCommand().equals("no")){
//发文件确认包
SrcPackage filerevPackage = new SrcPackage();
filerevPackage.setFrom(chatframe.getUser().getUNO());
filerevPackage.setTo(filerevPackage.getFrom());
filerevPackage.setType(SrcPackage.FILEREV_TYPE);
List NoList = new ArrayList();
NoList.add("N");
NoList.add(((List)revPackage.getData().get("FILECONTENT")).get(0));
HashMap data = new HashMap();
data.put("CONTENT", NoList);
filerevPackage.setData(data);
try {
oos.writeObject(filerevPackage);
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
btnSave.setEnabled(false);
btnNo.setEnabled(false);
// 创建样式文档
StyledDocument content= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
// 获取当前样式
SimpleAttributeSet style = new SimpleAttributeSet(); //当前时间
try {
content.insertString(content.getLength(),"您已经中止接收文件", style);
content.insertString(content.getLength(), "\n\n", style);
} catch (BadLocationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}if(e.getActionCommand().equals("cancle")){
//k*******
}
}
}
/**
* 设置线程循环的参数
* @return
*/
public void setTag(boolean tag) {
this.tag = tag;
}
public ObjectOutputStream getOos() {
return oos;
}
public JProgressBar getProbar() {
return probar;
}
public void setProbar(JProgressBar probar) {
this.probar = probar;
}
public ChatFrame getChatframe() {
return chatframe;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -