⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chat2.java

📁 java多线程聊天程序GUI界面socket实现
💻 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 + -