📄 chat2.java
字号:
package mychat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Chat2 extends JFrame implements Runnable{
JTextArea jta1,jta2;
JButton jb1,jb2;
JLabel jl;
JPanel jp1,jp2;
String ip,port;
PrintStream out;
BufferedReader in;
Socket s;
JFrame jFrame;
public void run(){
try{
while(true){
connectTheServer();
getIOStream();
proccessConnection();
closeConnection();
}
}catch(Exception ex){
out.println("对方已经断开连接...");
JOptionPane.showMessageDialog(null, "异常1:"+ex.getMessage());
}
}
public Chat2(String ip,String port){
this.ip=ip;
this.port=port;
try{
jFrame=new JFrame("与 "+ InetAddress.getByName(ip)+" 会 话 中");
jta1=new JTextArea(20,20);
jta1.setEditable(false);
jta1.setBackground(new Color(204,204,204));
jta2=new JTextArea(10,10);
jta2.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
String temp=KeyEvent.getKeyModifiersText(e.getModifiers()); // 注意获得组合(控制键如alt,ctrl,shift)键的方法;e.getKeyModifiersText(e.getKeyModifiers());
String zhj=temp.equals("")?"没有":temp;
String aj=KeyEvent.getKeyText(e.getKeyCode());/////////////e.getKeyText(e.getKeyCode())
if(zhj.equals("Ctrl")&&aj.equals("Enter")){
String ss=jta2.getText();
sendMessages(ss);
jta2.setText("");
}
}
});
jl=new JLabel(" 聊天内容输入框:");
jp1=new JPanel();
jb1=new JButton("发送");
jb2=new JButton("关闭");
jb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb1){
String ss=jta2.getText();
sendMessages(ss);
jta2.setText("");
}
}
});
jb2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb2){
int i=JOptionPane.showConfirmDialog(null, "确认关聊天闭窗口吗?", "关闭窗口", JOptionPane.OK_CANCEL_OPTION);
if(i==JOptionPane.OK_OPTION){
out.println("对方已经断开连接...");
jFrame.dispose();
}
else{
return;
}
}
}
});
jp1.setLayout(new FlowLayout());
jp1.setSize(200,10);
jp1.add(jb1);
jp1.add(jb2);
jp2=new JPanel();
jp2.setLayout(new BorderLayout());
jp2.setSize(220,220);
jp2.add(jl,BorderLayout.NORTH);
jp2.add(new JScrollPane(jta2),BorderLayout.CENTER);
jp2.add(jp1,BorderLayout.SOUTH);
JPanel contentPane=(JPanel)jFrame.getContentPane();
jFrame.setSize(550,550);
contentPane.setLayout(new BorderLayout());
contentPane.add(new JScrollPane(jta1),BorderLayout.NORTH);
contentPane.add(jp2,BorderLayout.CENTER);
jFrame.setLocation(250,20);
jFrame.setVisible(true);
jFrame.setResizable(false);
jFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}catch(Exception ex){
out.println("对方已经断开连接...");
JOptionPane.showMessageDialog(null, "异常2:"+ex.getMessage());
}
}
//————————————聊天的发起端-“客户端”要首先连接到指定的服务器——————
public void connectTheServer(){
try{
jta1.setText("");
jta1.append("尝试连接...."+"\n");
//——————InetAddress.getByName(String str);将String类型转变为网络地址————————
s=new Socket(InetAddress.getByName(ip),new Integer(port));
}catch(Exception ex){
jta1.append("连接发生异常!");
jta1.setCaretPosition(jta1.getText().length());
JOptionPane.showMessageDialog(null, "异常3:"+ex.getMessage());}
}
public void getIOStream(){
try{
out=new PrintStream(s.getOutputStream());
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "异常4:"+ex.getMessage());
}
}
public void proccessConnection(){
String temp=null;
do{
try{
temp=in.readLine();
jta1.append(temp+"\n");
jta1.setCaretPosition(jta1.getText().length());
}catch(Exception ex){
jta1.append("已经断开连接!");
jta1.setCaretPosition(jta1.getText().length());}
}while(true);
}
public void sendMessages(String str){
try{
out.println("He say >>>"+str);
jta1.append("You say >>> "+str+"\n");
jta1.setCaretPosition(jta1.getText().length());
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "异常5:"+ex.getMessage());
}
}
public void closeConnection(){
try{
s.close();
in.close();
out.close();
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "异常6:"+ex.getMessage());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -