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

📄 66.txt

📁 是一个 java 基础学习软件 有设计说明
💻 TXT
字号:
// 聊天器  可作 服务端 ,也可作客户端.
// 菜单 文件
// 菜单 设置:( 服务器) 建立连接 ----(客户端)连接服务器
// 可重用 网络输入、输出两个 线程
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.net.*;
import java.io.*;
import javax.swing.border.*;
//
public class TalkShow
{
   public static void main(String[] args)
   {
		show = new JTextArea(8,24);							// initiasize
		box = new JComboBox();
		message = new JTextField(20);	   	  
		frame = new ChatFrame(message,show,box);			// creat frame
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		menuBar menu = new menuBar();	
		menu.setFont(new Font("宋体",Font.PLAIN,16));		//	create  menu	
		frame.setJMenuBar(menu);		
		frame.setVisible(true);
		frame.setResizable(false);			
	}
	private static JFrame frame;
	public static String ipAddress = "192.168.0.32";
	public  static  final int PORT = 911;		
	private static JTextField message;			//   write  msg
	private static JTextArea  show;				//	 show talking context
	private static JComboBox  box;				//	 talker
	public	static boolean   sign; 				//	flag to interrupt  	
	
	public static void startThread(Socket socket)		// start  two  Thread
	{
		sendTalk r1 = new sendTalk(socket,message,show,box);		//r1  send msg
		getTalk r2 = new getTalk(socket,message,show);				//r2  show msg
		Thread t1 = new Thread(r1);
		Thread t2 = new Thread(r2);
		t1.start();
		t2.start();
	}
	public static void setHost()
	{
		ipAddress = JOptionPane.showInputDialog("设置主机IP:");
	}
	public static void newLink()  //  Server  new a Link for waiting Client to link
	{
		TalkShow.sign=true;
		ServerSocket s=null;	
		Socket socket=null;	
		try
		{
			s = new ServerSocket(PORT);				// create ServerSocket
			show.append("等待客户端.......");
			socket = s.accept();
			show.append("客户端已连入\n");
			show.append("----- 聊天 开始 ----server---\n");				
		}catch(IOException e){
			e.printStackTrace();
		}
	   	box.addItem("布什:");
	   	box.addItem("萨达姆:");						
		startThread(socket);						//  start  socket thread
		try{
			s.close();
		}catch(IOException e)
		{
			e.printStackTrace();	
		}		
	}
	public static void linkServer()			//  link to server 
	{
		TalkShow.sign=true;
		Socket s=null;	
		try{
			s = new Socket(ipAddress,PORT);
			show.append("已连接服务端......");
			show.append("\n------ 聊天 开始 ---client----\n");		
		}catch(IOException e){}
	    box.addItem("萨达姆:");
	   	box.addItem("布什:");		
		startThread(s);						// start socket thread 
	}
	public static void interrupt()			// interrupt  chating 
	{
		TalkShow.sign = false;
		message.setText("");
		box.removeAll();
	}
	public static void saveFile()			// save chating records
	{
		FileDialog fd=new FileDialog(frame,"保存文件对话框",FileDialog.SAVE);
		fd.setVisible(true);
		String filename=fd.getDirectory()+fd.getFile();
			
		File file = new File(filename);  
		try 
		{
			StringTokenizer  st = new StringTokenizer(show.getText(),"\n");
			PrintWriter out = new PrintWriter(new FileWriter(file));
			while(st.hasMoreElements())
			{
				out.println(st.nextToken());
			}
			out.close();
		}catch (IOException e) 
		{
			e.printStackTrace();
		}	   					
	}
}
// define ChatFrame 
class ChatFrame extends JFrame					//  frame style
{

   public ChatFrame(JTextField message,JTextArea  show,JComboBox  box) 								// initialization  Emailframe
   {
		this.setSize(WIDTH, HEIGHT);
		this.setTitle("...局域网聊天 ... ");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocation(250,100);
		this.setIconImage(Toolkit.getDefaultToolkit().getImage("about.gif"));		
 		Container contentPane;		
		contentPane = getContentPane();
		
		show.setFont(new Font("宋体",Font.PLAIN,20));
		JScrollPane scroll = new JScrollPane(show);
		contentPane.add(scroll,BorderLayout.CENTER); 
		show.setEditable(false);
		show.setLineWrap(true);
		
		msgPanel panel = new msgPanel(message,box); 
		Border border = BorderFactory.createEtchedBorder();
		panel.setBorder(border);
		contentPane.add(panel,BorderLayout.SOUTH);	  
   }
	public static final int WIDTH = 365;
	public static final int HEIGHT = 400;
	private JButton send; 					// set flag true
	public static boolean flag = false;		// if flag = true ,then send msg
	  
   class msgPanel extends JPanel
   {
   	  public msgPanel(JTextField message,JComboBox  box)
   	  {
	   	  this.add(box);
	   	  message.setFont(new Font("宋体",Font.PLAIN,20));
	   	  this.add(message);
	   	   
		  send = new JButton("发送");
		  send.addActionListener(new
			ActionListener()
			{
				public void actionPerformed(ActionEvent event)
				{
					ChatFrame.flag =true;
				}
			}); 
		  this.add(send);  
	  }
   }
}
class getTalk implements Runnable  //  Thread 1  read  msg
{
	Socket s;	
	JTextArea  show;
	JTextField message;
	public 	getTalk(Socket s,JTextField message,JTextArea  show)
	{
		this.s = s;
		this.show=show;
		this.message=message;
	}
	public void run() 
	{
		try 
		{
			DataInputStream in =new DataInputStream(s.getInputStream());
			while (TalkShow.sign) 		// if sign is true , chating is interrupted
			{
				String str = in.readUTF();	
				show.append(str+"\n");
			}
			in.close();
			s.close();
		}catch(IOException e){}
		show.append("关闭读入....\n");		
	}
}
class sendTalk implements Runnable //, ActionListener //  Thread 2   send msg
{
	Socket s;	
	private JTextField message;
	private JTextArea  show;
	private JComboBox  box;	
	public 	sendTalk(Socket s,JTextField message,JTextArea  show,JComboBox  box)
	{
		this.s = s;
		this.message=message;
		this.show=show;
		this.box=box;
	}
	public void run() 
	{	
		try 
		{
			DataOutputStream out = new DataOutputStream(s.getOutputStream());
			while (TalkShow.sign)				// if sign is true , chating is interrupted
			{
				if(ChatFrame.flag)				// if sned button is pressed , send msg
				{
					String s =box.getSelectedItem()+ message.getText();
			   		show.append(s+"\n");
					out.writeUTF(s);
					out.flush();
					ChatFrame.flag=false;	
					message.setText("");
				}
				try{
					Thread.sleep(700);
				}catch(InterruptedException e){}
			}
			out.close();
			s.close();
		}catch(IOException e){} 	
		show.append("关闭输出...\n");
	}
}
class menuBar extends JMenuBar   implements ActionListener        //    菜单
{
	public menuBar()
	{
		JMenu File = new JMenu ("文件");						//file menu
		saveFile = new 	JMenuItem("保存记录");	
		saveFile.addActionListener(this);
		File.add(saveFile);
		File.addSeparator();		
		JMenuItem Exit = new JMenuItem ("退出(Exit)",'X');
		Exit.addActionListener(this);      			 
		File.add(Exit);
		this.add(File);  
		
		JMenu Option= new JMenu ("启动聊天");

		newLink = new JMenuItem ("设为主机(As Server)",'S');				// as  a  Server
		newLink.addActionListener(this);	
		Option.add(newLink);
		Option.addSeparator();
		setHost = new JMenuItem ("设置主机IP");				// as  a  Server
		setHost.addActionListener(this);	
		Option.add(setHost);	
		linkServer = new JMenuItem ("连接主机(As Client)",'C');			// as a Client ,Link to server
		linkServer.addActionListener(this);	
		Option.add(linkServer);		
		Option.addSeparator();
		interrupt = new JMenuItem ("断开连接");	// as a Client ,Link to server
		interrupt.addActionListener(this);	
		interrupt.setEnabled(false);
		Option.add(interrupt );		
		this.add(Option);  
	}
	JMenuItem setHost;
	JMenuItem linkServer;
	JMenuItem newLink;	
	JMenuItem saveFile;	
	JMenuItem interrupt;
		
	public void actionPerformed(ActionEvent e) //  menu Listener
	{
		String s = e.getActionCommand();
		if(s.equals("保存记录"))
		{
			TalkShow.saveFile();
		}
		if(s.equals("退出(Exit)"))
		{
			TalkShow.interrupt(); 	
			System.exit(0);
		}
		if(s.equals("设置主机IP"))
			TalkShow.setHost();
		if(s.equals("设为主机(As Server)"))
			new Thread()
			{
				public void run()
				{		
					linkServer.setEnabled(false);	// 使菜单“建立连接”不可用
					newLink.setEnabled(false);		// 使菜单"连接服务器”不可用
					TalkShow.newLink();				//  创建 ServerSocket	
					interrupt.setEnabled(true);					
				}
			}.start();	
		if(s.equals("连接主机(As Client)"))
			new Thread()
			{
				public void run()
				{
					newLink.setEnabled(false);		// 使菜单"连接服务器”不可用
					linkServer.setEnabled(false);	// 使菜单“建立连接”不可用
					TalkShow.linkServer();			// 创建 socket ,连接 ServerSocket	
					interrupt.setEnabled(true);										
				}
			}.start();	
		if(s.equals("断开连接"))
		{
			TalkShow.interrupt(); 					// 断开双方连接
			linkServer.setEnabled(true);			// 使菜单可用
			newLink.setEnabled(true);
		}
	}
}

⌨️ 快捷键说明

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