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

📄 serverthread2.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 ServerThread2 extends JFrame implements Runnable{
	Socket s;
	PrintStream out;
	BufferedReader in;
	JTextArea jta1,jta2;
	JButton jb1,jb2;
	JLabel jl;
	JPanel jp1,jp2;
	JFrame jFrame;
	public void  run(){
		
		try{
			while(true){
				getIOStream();
				proccessConnection();//————死循环输出至异常————
				closeConnection();
			}
	}catch(Exception ex){
		JOptionPane.showMessageDialog(null, "异常a:"+ex.getMessage());
	}
}
	
	public ServerThread2(Socket s){
		this.s=s;
		jFrame =new JFrame("与 "+s.getInetAddress()+" 会 话 中");
		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("关闭");
		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);
		
		System.out.println(s.getInetAddress());
		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);
		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;
					}

				}
			}
		});
		
	}
	
	public void getIOStream(){
		try{
		out=new PrintStream(s.getOutputStream());
		in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		jta1.setText("");
		jta1.append("监听连接..."+"\n");
		jta1.append("与对方连接成功!"+"\n");
		}catch(Exception ex){
			JOptionPane.showMessageDialog(null, "异常b:"+ex.getMessage());
		}
	}
	
	public void proccessConnection(){
		out.println("与对方连接成功!");
		String temp=null;

		//————————利用死循环语句,捕获对方数据流——————		
		do{
			try{
		     temp=in.readLine();
			 jta1.append(temp+"\n");
			 jta1.setCaretPosition(jta1.getText().length());
			 temp=temp.toLowerCase();
			 }catch(Exception ex){
				jta1.append("已经断开连接!");
				jta1.setCaretPosition(jta1.getText().length());
				break;}
		}while(true);
	}
		
	public void closeConnection(){
			try{
				s.close();
				out.close();
				in.close();
				}catch(Exception ex){
					JOptionPane.showMessageDialog(null, "异常c:"+ex.getMessage());
				}
		}
	public void sendMessages(String s){
		try{
			out.println("He say >>>"+s);
			jta1.append("You say >>> "+s+"\n");
			jta1.setCaretPosition(jta1.getText().length());
		}catch(Exception ex){
			JOptionPane.showMessageDialog(null, "异常d:"+ex.getMessage());
		}
	}
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -