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

📄 qq.java

📁 实现JAVA聊天程序
💻 JAVA
字号:
import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.*;
import java.io.*;
import java.net.*;

////client
public class QQ {

	
	public static void main(String[] args) {
		JFrame.setDefaultLookAndFeelDecorated(true);
		MyFrame frame=new MyFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.show();
		

	}

}
class MyFrame extends JFrame{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public MyFrame(){
		setSize(600,400);
		Toolkit tk=Toolkit.getDefaultToolkit();
		Image img=tk.getImage("D:\\duke.gif");
		setIconImage(img);
		setTitle("我的实时通信作品");
		
		//添加菜单:保存聊天记录,下载功能
		JMenuBar menubar=new JMenuBar();
		this.setJMenuBar(menubar);
		JMenu file=new JMenu("File");
		file.setMnemonic('F');
		save=new JMenuItem("SaveTheMsg",'S');
		save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
		save.addActionListener(new SaveListener());
		file.add(save);
		
		
		download=new JMenuItem("Download",'D');
		download.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK));
		download.addActionListener(new DownloadListener());
		file.add(download);
		menubar.add(file);
		
		
		
		jl_ip=new JLabel("IP:");
		jl_port=new JLabel("PORT:");
		jtf_ip=new JTextField("127.0.0.1",20);
		jtf_port=new JTextField("6000",20);
		jbt_connect=new JButton("Connect");
		
		JPanel jp1=new JPanel();
		jp1.add(jl_ip);
		jp1.add(jtf_ip);
		jp1.add(jl_port);
		jp1.add(jtf_port);
		jp1.add(jbt_connect);
		
		getContentPane().add(jp1,BorderLayout.NORTH);
		
		
		jta_msg=new JTextArea("",10,30);
		JScrollPane jsc1=new JScrollPane(jta_msg);
		
		
		jtf_text=new JTextField("",10);
		
		
		JPanel jp2=new JPanel(new BorderLayout());
		
		jp2.add(jsc1,BorderLayout.NORTH);
		
		jp2.add(jtf_text,BorderLayout.SOUTH);
		
		getContentPane().add(jp2,BorderLayout.CENTER);
		
		jbt_send=new JButton("Send");
		jbt_close=new JButton("Close");
		jbt_server =new JButton("Server");
		JPanel jp3=new JPanel();
		jp3.add(jbt_send);
		jp3.add(jbt_close);
		jp3.add(jbt_server);
		getContentPane().add(jp3,BorderLayout.SOUTH);
		
		
		//添加事件响应
		jbt_connect.addActionListener(new ConnectListener());
		jbt_server.addActionListener(new ServerListener());
		jbt_send.addActionListener(new SendListener());
		key=true;
		
		
	}
	class ConnectListener implements ActionListener{
		public void actionPerformed(ActionEvent e){
			try{
				
				//jbt_server.setEnabled(false);
				JOptionPane.showMessageDialog(null, "Connect start!");
				String ip=jtf_ip.getText();
				int port=Integer.parseInt(jtf_port.getText());
				sock=new Socket(ip,port);
				out=new PrintWriter(sock.getOutputStream());
				in=new BufferedReader(new InputStreamReader(sock.getInputStream()));
				out.println("Hi!");
				out.flush();
				new RecvThread().start();
				
				
			}catch(Exception e1){
				JOptionPane.showMessageDialog(null,e1.getMessage());
				}
		}
	}
	class SendListener implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String s=jtf_text.getText();
		try{
		    if(s!=null){
		    	out.println(s);
				out.flush();
				jta_msg.append("me: "+s+"\n");
				jtf_text.setText("");
		    }
		 }catch(Exception ex){
			 JOptionPane.showMessageDialog(null, "send error!");
		 }
			
		}
	}
	class CloseListener implements ActionListener{
		public void actionPerformed(ActionEvent e){
			try{
			key=false;
			in.close();
			out.close();
			sersock.close();
			sock.close();
			}catch(Exception e1){
				JOptionPane.showMessageDialog(null,e1.getMessage());
			}
			
		}
	}
	class ServerListener implements ActionListener{
		public void actionPerformed(ActionEvent e){
			new ServerThread().start();
		}	
	}
	////downloadListener
	class DownloadListener implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			
			DownloadFrame dl=new DownloadFrame();
			
			dl.pack();
			dl.show();
			
			
		}
		
	}
	////saveListener
	class SaveListener implements ActionListener{
		public void actionPerformed(ActionEvent e){
			try{
				FileDialog filedlg=new FileDialog(MyFrame.this,"choose the directory",FileDialog.SAVE);
				filedlg.setVisible(true);
				String fname=filedlg.getDirectory()+filedlg.getFile();
				File file=new File(fname);
				PrintWriter out=new PrintWriter(new FileOutputStream(file));
				String text=jta_msg.getText();
				out.println(text);
				out.close();
				
			}catch(Exception e1){
				System.out.println(e1.getMessage());
			}
			
			
				//JOptionPane.showMessageDialog(null, "Test");	
		}	
	}
	class RecvThread extends Thread{
	    public void run(){
	    	
	    	try{
	    		while(key){
	    		    String s=in.readLine();
	    			jta_msg.append("freind:  "+s+"\n");	    			
	    		}
	    	} catch(Exception e1){
	    		   JOptionPane.showMessageDialog(null,"已无法侦听!");
	    		   return;
    		  }
	    }	
	  }
	class ServerThread extends Thread{
		public void run(){
       try{
				
				JOptionPane.showMessageDialog(null, "Sever start!");
				//jbt_connect.setEnabled(false);
				sersock=new ServerSocket(6000);
				sock=sersock.accept();
				out=new PrintWriter(sock.getOutputStream());
				in=new BufferedReader(new InputStreamReader(sock.getInputStream()));
				out.println("Hello!");
				out.flush();
				new RecvThread().start();
				
			   }catch(IOException e1){
				   JOptionPane.showMessageDialog(null,e1.getMessage());
			     }
		}
	}
	
	///download frame
	
	private JMenuItem save;
	private JMenuItem download;
	
	private JLabel jl_ip;
	private JLabel jl_port;
	private JTextField jtf_port;
	private JTextField jtf_ip;
	private JTextField jtf_text;
	private JTextArea jta_msg;
	private JButton jbt_connect;
	private JButton jbt_send;
	private JButton jbt_server;
	private JButton jbt_close;
	
	
	Socket sock;
	ServerSocket sersock;
	BufferedReader in;
	PrintWriter out;
	boolean key=false;
}
class DownloadFrame extends JFrame{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public DownloadFrame(){
		getContentPane().setLayout(new BorderLayout());
		setTitle("Download the file!");
		setSize(400,300);
		JPanel jp1=new JPanel();
		jp1.add(label);
		jp1.add(url);
		jp1.add(download1);
		
		JPanel jp2=new JPanel();
		jp2.add(new JLabel("please wait......"));
		jp2.add(jpb);
		getContentPane().add(jp1,BorderLayout.NORTH);
		getContentPane().add(jp2,BorderLayout.CENTER);
		
		download1.addActionListener(new DownListener());
		
		this.addWindowListener(new WindowAdapter(){
          public void windowClosing(WindowEvent e) {
				DownloadFrame.this.setVisible(false);
				
			}
          });
	}
	class DownListener implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			try{
				String s=url.getText();
				if(s.length()>0)
				{
					URL src=new URL(s);
					URLConnection connect=src.openConnection();
					int len=connect.getContentLength();
					InputStream in=connect.getInputStream();
					FileDialog fdlg=new FileDialog(DownloadFrame.this,"Choose where you what to save",
							FileDialog.SAVE);
					fdlg.setVisible(true);
					String name=fdlg.getDirectory()+fdlg.getFile();
					File file=new File(name);
					FileOutputStream fout=new FileOutputStream(file);
					jpb.setMaximum(len);
					
					
					
					
					int data;
					while((data=in.read())!=-1){
						fout.write(data);
						long m=file.length();
						repaint();
						jpb.setValue((int)m);
					}
					fout.close();
					in.close();
				
				}
			}catch(Exception e1){
				JOptionPane.showMessageDialog(null, e1.getMessage());
			}
			
		}
		
	}
	JLabel label=new JLabel("please input the url: ");
	JTextField url=new JTextField(30);
	JButton download1=new JButton("DOWNLOAD");
	JProgressBar jpb=new JProgressBar();
	
}

⌨️ 快捷键说明

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