java版仿QQ2012源代码分享

2024-02-12 00:10

本文主要是介绍java版仿QQ2012源代码分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(把前面的一大段废话删了,因为后来觉得写个QQ聊天也没什么大不了的,就直奔主题吧~)

(补个链接吧:http://download.csdn.net/detail/tangcaijun/4804760)

学java一个月了,写了这个小东东.....

 

仿QQ聊天软件 chat2_1版本更新内容
1
、支持广播群聊功能,可提取电脑用户名作为区分名称
2
、新增优化登录和登录ing界面(高仿QQ2012
3
、每台计算机上可支持多个客户端同时运行
4
、暂不开放帐号申请,暂无好友、个人信息保存(些版本尚未添加数据库)
5
、默认端口依然是 8888端口(用此高端口可避免和一般软件相互占用端口造成登录失败)
6
、优化服务端,新增系统消息显示,可时时监控服务运行状态
7
、服务端新增聊天监控,可观察各客户端的聊天信息
8
、把验证登录信息移至服务器端

注:此版本暂无连接数据库,所以统一登录QQ724447804(登录窗口中有保存为默认帐号)密码:a

(这次聊天界面暂时没怎么优化,呵呵,嗯,先将就下吧.....下一版本有空再弄弄吧,这次主要是想和正在学着java的同学交流分享下编程的一些东西而已,希望高手见了,不要太见笑好了....)

 

登录窗口


登录中窗口


server服务器窗口


 

分享下代码,希望有兴趣的同志可以看看这东西,这次的2_1版本中还有很多弊端,但聊天框基本上都写了的

这次代码中还有很多不成熟的地方,希望能得到一些高手们的建议吧,先谢谢给评论的同志们啦.....呵呵~~~ 

 

//---------------------------------------client客户端------------------------------------------------------//

//---------- 1login.java    -----------------------

package chat_2;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/*** 广石化计算机11-3班* choldrim(财俊)* * @author 神奇物种**/
@SuppressWarnings("serial")
public class login extends JFrame{public static Main_1       m           = null;private JLabel         applyLabel, retrpwdLabel;        //申请帐号 找回密码private JTextField        qq_tf;             //帐号输入框private JPasswordField       pwd_pwf;            //密码输入框private JCheckBox        recdpwd_chkb, autologin_chkb;       //记住密码, 自动登录private JLabel         portrait_lab;           //头像public static int         port          = 8888;  //端口public static String       ip           = "127.0.0.1";//界面设置public void login_interface() {this.setTitle("Chat_2020");Container cp = getContentPane();cp.setLayout(new BorderLayout());Panel p1 = new Panel();p1.setLayout(null);//头像portrait_lab = new JLabel();portrait_lab.setIcon(new ImageIcon("pic//portrait.png"));portrait_lab.setBounds(20, 5, 82, 82);p1.add(portrait_lab);//qq and password 输入qq_tf= new JTextField("724447804");qq_tf.setBounds(110, 10, 160, 20);qq_tf.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {loginAction(e);}});p1.add(qq_tf);pwd_pwf= new JPasswordField();pwd_pwf.setBounds(110, 40, 160, 20);pwd_pwf.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {loginAction(e);}});p1.add(pwd_pwf);//申请帐号applyLabel = new JLabel();applyLabel.setText("注册帐号");applyLabel.setBounds(290, -8, 50, 50);applyLabel.setFont(new Font("宋体", Font.PLAIN, 12));applyLabel.setForeground(Color.blue);applyLabel.addMouseListener(new mouse());applyLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));p1.add(applyLabel);//找回密码retrpwdLabel = new JLabel();retrpwdLabel.setText("找回密码");retrpwdLabel.setBounds(290, 25, 80, 50);retrpwdLabel.setFont(new Font("宋体", Font.PLAIN, 12));retrpwdLabel.setForeground(Color.blue);retrpwdLabel.addMouseListener(new mouse());retrpwdLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));p1.add(retrpwdLabel);//记住密码recdpwd_chkb = new JCheckBox();recdpwd_chkb.setText("记住密码");recdpwd_chkb.setBounds(115, 65, 80, 20);p1.add(recdpwd_chkb);//自动登录autologin_chkb = new JCheckBox();autologin_chkb.setText("自动登录");autologin_chkb.setBounds(195, 65, 80, 20);p1.add(autologin_chkb);//多帐号JButton moreidButton = new JButton();moreidButton.setIcon(new ImageIcon("pic//moreIdButton.PNG"));moreidButton.setBounds(15, 100, 70, 25);p1.add(moreidButton);//设置JButton setButton = new JButton("设置");//setButton.setIcon(new ImageIcon("pic//moreIdButton.PNG"));setButton.setBounds(100, 100, 70, 25);setButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//new SetPort();//或用:ip = JOptionPane.showInputDialog("请输入服务器 ip");port = Integer.parseInt(JOptionPane.showInputDialog("请输入端口"));}});p1.add(setButton);//登录JButton loginButton = new JButton();loginButton.setIcon(new ImageIcon("pic//loginbutton.png"));loginButton.setBounds(280, 100, 70, 25);loginButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {loginAction(e);}});p1.add(loginButton);//北部图片JLabel mainJLabel = new JLabel();mainJLabel.setIcon(new ImageIcon("pic//qq2020.PNG"));add(mainJLabel, BorderLayout.NORTH);//图标Image logoImage = Toolkit.getDefaultToolkit().getImage("pic//qqlogo.jpg");setIconImage(logoImage);//大小Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();setLocation(screensize.width/3, screensize.height/3);setSize(379, 280);//添加中部panelcp.add(p1, BorderLayout.CENTER);setResizable(false);setDefaultCloseOperation(DISPOSE_ON_CLOSE);setVisible(true);}//label点击事件private class mouse extends MouseAdapter {@Overridepublic void mouseClicked(MouseEvent e) {JLabel labeltype = (JLabel)e.getSource();if(labeltype == applyLabel){
System.out.println("apply for an account");}super.mouseClicked(e);}}//登录事件protected void loginAction(ActionEvent e) {if(qq_tf.getText().trim().equals("") || qq_tf.getText().trim().length()<6 || qq_tf.getText().trim().length()>12){JOptionPane.showMessageDialog(null, "请输入正确的账号", "提示", JOptionPane.INFORMATION_MESSAGE);}else if(pwd_pwf.getText().trim().equals("")){JOptionPane.showMessageDialog(null, "请输入密码", "提示", JOptionPane.INFORMATION_MESSAGE);} else {//ChkLogin chkLogin = new ChkLogin(qq_tf.getText().trim(), pwd_pwf.getText().trim());m = new Main_1(qq_tf.getText().trim(), pwd_pwf.getText().trim(), port, ip);setVisible(false);}}public static void main(String[] args) {new login().login_interface();}
}
 


 

//---------- 2chklogin.java    -----------------------

 package chat_2;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
/*** 广石化计算机11-3班* choldrim(财俊)* @author 神奇物种**/
public class ChkLogin {public static  Socket      clientSocket       =null; //public  DataInputStream      dis          =null; //输入流public DataOutputStream      dos          =null; //输出流public ChkLogin(String qq, String pwd ){try {clientSocket = new Socket(Main_1.ip, Main_1.port);dos = new DataOutputStream(clientSocket.getOutputStream());dis = new DataInputStream(clientSocket.getInputStream());dos.writeUTF(Main_1.qq+"&"+Main_1.pwd);    //把QQ和pwd(密码)传给服务器,用&符号作为分界Main_1.login_tag = dis.readInt();    //读取服务器返回的参数} catch (UnknownHostException e) {Main_1.login_tag = 0;JOptionPane.showMessageDialog(null, "连接服务器失败,请检查端口和ip是否正确", "提示", JOptionPane.INFORMATION_MESSAGE);disconnect();System.exit(0);} catch (ConnectException e) {Main_1.login_tag = 0;JOptionPane.showMessageDialog(null, "连接服务器失败", "提示", JOptionPane.INFORMATION_MESSAGE);disconnect();System.exit(0);}catch (IOException e) {JOptionPane.showMessageDialog(null, "程序内部发生错误", "错误", JOptionPane.ERROR_MESSAGE);disconnect();e.printStackTrace();}}protected void disconnect() {if(clientSocket != null){try {dos.flush();dos.close();dis.close();clientSocket.close();} catch (IOException e1) {e1.printStackTrace();}}}}


 

//-----------------3main.java------------------

package chat_2;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/*** 广石化计算机11-3班* choldrim(财俊)* @author 神奇物种**/
@SuppressWarnings("serial")
public class Main_1 extends JFrame{public  static String       qq;public  static String       pwd;public static  int        port          =8888;public static  String       ip           ="127.0.0.1";public static int        login_tag;//登录状态标志 0登录失败 1帐号或密码错误 2登录成功private login         lg           =new login();private ChkLogin         chk           =null;public Main_1(){};@SuppressWarnings("static-access")public Main_1(String qq, String pwd, int port, String ip){this.qq = qq;this.pwd = pwd;this.port = port;this.ip = ip;Container cp = getContentPane(); //内容层JPanel p1 = new JPanel();   //组件面板p1.setLayout(null);//北部图片JLabel top_pic = new JLabel();top_pic.setIcon(new ImageIcon("pic//qq2020_main.png"));cp.add(top_pic, BorderLayout.NORTH);//显示帐号JLabel qqLabel = new JLabel(qq);JLabel lgingLabel = new JLabel("正在登录...");qqLabel.setBounds((300-qq.length()*10)/2, 10, 100, 20);qqLabel.setFont(new Font("宋体", Font.PLAIN, 15));lgingLabel.setFont(new Font("宋体", Font.PLAIN, 13));lgingLabel.setBounds(110, 25, 100, 20);p1.add(lgingLabel);p1.add(qqLabel);//取消登录JButton cancelButton = new JButton();cancelButton.setIcon(new ImageIcon("pic/cancellogin.png"));setTitle("取消");cancelButton.setBounds(100, 50, 90, 30);cancelButton.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {lg.m.setVisible(false);new login().login_interface();super.mouseClicked(e);}});p1.add(cancelButton);//登录动画JLabel loginflash = new JLabel();loginflash.setIcon(new ImageIcon("pic//Logining_Vip.gif"));loginflash.setBounds(30, 90, 220, 150);p1.add(loginflash);//基本frame设置add(p1, BorderLayout.CENTER);Image logoImage = Toolkit.getDefaultToolkit().getImage("pic//qqlogo.jpg");setTitle("chat_2020");setIconImage(logoImage);setResizable(false);setDefaultCloseOperation(DISPOSE_ON_CLOSE);Dimension scrnsize = Toolkit.getDefaultToolkit().getScreenSize();setBounds(scrnsize.width*2/3, 10, 300, 620);//关闭窗体时须关闭连接等等一些设置addWindowListener(new WindowAdapter() {@Overridepublic void windowClosed(WindowEvent e) {//.....if(chk != null)chk.disconnect();System.exit(0);super.windowClosed(e);}});setVisible(true);new Thread(new loginconnect()).start();//  try {
//   new Thread(new loginconnect()).join(20);
//  } catch (InterruptedException e1) {
//   JOptionPane.showMessageDialog(null, "连接服务器超时", "提示", JOptionPane.INFORMATION_MESSAGE);
//   System.exit(0);
//  }};//登录线程class loginconnect implements Runnable{@Overridepublic void run() {new ChkLogin(qq, pwd);
//延迟2秒,用于显示登录界面。。。可不用这个。。try {Thread.sleep(1500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(login_tag == 0){JOptionPane.showMessageDialog(null, "登录失败", "提示", JOptionPane.INFORMATION_MESSAGE);lg.m.setVisible(false);new login().login_interface();return;}if(login_tag == 1){JOptionPane.showMessageDialog(null, "密码错误", "提示", JOptionPane.INFORMATION_MESSAGE);lg.m.setVisible(false);new login().login_interface();return;}if (login_tag == 2) {lg.m.setVisible(false);new ChatClient().chatInterface();System.out.println("登录成功。。。...");}}}//临时main方法
// public static void main(String[] args){
//  new Main_1("123", "123", 8888, "127.0.0.1");
// }
}


 

// ----------------- 4chatclient.java-----------------

package chat_2;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.JFrame;
/*** 广石化计算机11-3班* choldrim(财俊)* * chatClient和chatServer都是前阵子写的* 可能编程习惯和命名上没有很统一,但还是必要的地方都已经注有注释了* * @author 神奇物种**/
@SuppressWarnings("serial")
public class ChatClient extends JFrame{Socket           s         =ChkLogin.clientSocket;DataOutputStream        dos         =null;DataInputStream        dis         = null;TextField         tf          = new TextField();TextArea          ta         =new TextArea();private boolean        isconneted        = false;// is it connected to the server...public void chatInterface()    //create chat frame...{setTitle(Main_1.qq+"---广播群聊");Toolkit tk = Toolkit.getDefaultToolkit();setIconImage(tk.getImage("pic/qqlogo1.png"));Dimension screensize = tk.getScreenSize();setLocation(screensize.width/3, screensize.height/3);add(tf,BorderLayout.CENTER);add(ta,BorderLayout.NORTH);ta.setEditable(false);ta.setBackground(Color.white);pack();this.addWindowListener(new WindowAdapter(){//@Overridepublic void windowClosing(WindowEvent we){disconnet();     //don't forget this even you want to exitSystem.exit(0);}});//添加监听,enter发送信息tf.addActionListener(new tfListener()); setVisible(true);start();RecvThread();     //add receive thread....(添加接收信息线程)}private void start() {try {isconneted = true;dos = new DataOutputStream(s.getOutputStream());dis = new DataInputStream(s.getInputStream());} catch (ConnectException e) {System.out.println("server is out of running...plz wait...");System.exit(0);}catch (IOException e) {e.printStackTrace();}}private void disconnet() {try {if(dos != null)dos.close();if(s != null)s.close();} catch (IOException e) {e.printStackTrace();}}private class tfListener implements ActionListener{  @Overridepublic void actionPerformed(ActionEvent e) {String str = tf.getText().trim();tf.setText("");try {dos.writeUTF(str);dos.flush();} catch (IOException e1) {e1.printStackTrace();}}}private void RecvThread() {new Thread(new Runnable() {public void run() {try {while (isconneted) {String str = dis.readUTF();ta.setText(ta.getText() + '\n' + str);}} catch (SocketException e) {System.out.println("server has exited plz try again later...");System.exit(0);} catch (IOException e) {e.printStackTrace();}}}).start();}//  public static void main(String[] args) {
//   new ChatClient().chatInterface();
//  }}


 

//-----------------------------------------------------------------server服务器端--------------------------------------------------//

//------------------5server.java-------------------------//

package server;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
/*** 广石化计算机11-3班* cholrim(财俊)* @author 神奇物种**/
@SuppressWarnings("serial")
public class ChatServer extends JFrame{private boolean         started        = false; //服务器是否已启动private boolean         bConneted        = false;  // is connected to client...ServerSocket          ss          = null;  //服务端套接字ArrayList<Client>         clients        = new ArrayList<Client>(); //用来装client对像的容器public static int         login_tag;          //登录状态标志 0无登录 1帐号或密码错误 2登录成功private JTextPane        jta         =new JTextPane(); //消息框private JTextField        jtf_port       =new JTextField(); //端口设置输入框private JTextPane         messagePane       = new JTextPane();public String         qq;public String         pwd;public int          port        = 8888;//---------------------------------服务器界面----------------------------------------------public void serverInterface(int port) {this.port = port;setTitle("qq2020_server");setIconImage(Toolkit.getDefaultToolkit().getImage("pic/StdLoginBanner.png"));Container cp = getContentPane();//获取内容面板//消息JPanel jp_msg = new JPanel();  //消息框面板jp_msg.setLayout(new BorderLayout());jta.setEditable(false);jta.setText("系统消息:\n");jp_msg.add(jta, BorderLayout.CENTER);//设置JPanel jp_set = new JPanel(new BorderLayout()); //设置面板JPanel p1 = new JPanel(null);JLabel jlb_setPort = new JLabel("设置监听端口为:");jlb_setPort.setFont(new Font("幼圆", Font.BOLD, 16));JButton jb_port = new JButton("确定");jlb_setPort.setBounds(50, 10, 200, 50);jtf_port.setBounds(190, 23, 50, 28);jb_port.setBounds(250, 23, 60, 28);p1.add(jlb_setPort);p1.add(jtf_port);p1.add(jb_port);jp_set.add(p1, BorderLayout.CENTER);JButton runButton = new JButton("启动服务器");//启动服务器按钮runButton.addActionListener(new serverRuning());jp_set.add(runButton, BorderLayout.SOUTH);jtf_port.addActionListener(new changePort());jb_port.addActionListener(new changePort());//菜单栏setJMenuBar(new menu());JTabbedPane jtab = new JTabbedPane();jtab.addTab("系统消息", jp_msg);jtab.add("聊天信息", messagePane);  //监听聊天信息jtab.addTab("设置", jp_set);cp.add(jtab, BorderLayout.CENTER);//设置frame大小Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();setBounds(scrSize.width/3, scrSize.height/3, 500, 400);setVisible(true);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent arg0) {System.exit(0);};});start(port);}//---------------------------------启动服务器按钮-----------------------------------------class serverRuning implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {if(started == true){JOptionPane.showMessageDialog(null, "服务器已启动");}else {//start(port);}}}//---------------------------------改变端口的输入与按钮的监听器-------------------------------class changePort implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {if(started == false){port = Integer.parseInt(jtf_port.getText().trim());}else {JOptionPane.showMessageDialog(null, "服务器启动后不能再更改端口");}}}//---------------------------------菜单栏---------------------------------------------------class menu extends JMenuBar{public menu(){JMenu systemMenu = new JMenu("系统");JMenu funcMenu = new JMenu("功能");JMenu helpMenu = new JMenu("help");JMenuItem aboutusMenuItem = new JMenuItem("关于神奇物种");JMenuItem fileMenuItem = new JMenuItem("文件");JMenuItem choiceMenuItem = new JMenuItem("选项");JMenuItem exitMenuItem = new JMenuItem("退出");JMenuItem skinMenuItem = new JMenuItem("皮肤");systemMenu.add(fileMenuItem);systemMenu.add(choiceMenuItem);systemMenu.add(exitMenuItem);funcMenu.add(skinMenuItem);helpMenu.add(aboutusMenuItem);add(systemMenu);add(funcMenu);add(helpMenu);}}//---------------------------------启动服务器的主要方法---------------------------------------public void start(int port) {try {ss = new ServerSocket(port);started = true;jta.setText(jta.getText()+"    server has run....\n");} catch (BindException e) {JOptionPane.showMessageDialog(null, "服务器端口被占用,请关闭相关程序再启动服务器");System.exit(0); } catch (IOException e) {e.printStackTrace();}while (started) {try {Socket s = ss.accept();DataInputStream dis = new DataInputStream(s.getInputStream());DataOutputStream dos = new DataOutputStream(s.getOutputStream());String str1 = dis.readUTF();String str2[] = str1.split("&");qq = str2[0];pwd = str2[1];new Chklogin_server(qq, pwd);if(login_tag == 1){dos.writeInt(login_tag);dos.flush();jta.setText(jta.getText()+"    该用户输入的帐号或密码错误...\n");}if (login_tag == 2) {dos.writeInt(login_tag);dos.flush();jta.setText(jta.getText()+"    用户: "+s.getInetAddress().getLocalHost().getHostName()+"  验证通过..\n");Client c = new Client(s);new Thread(c).start(); // run the 线程clients.add(c);}} catch (IOException e) {e.printStackTrace();}}try {if(ss != null)ss.close(); } catch (IOException e) {e.printStackTrace();}}//---------------------------------接收和处理client的类-------------------------------------class Client implements Runnable {     // many线程处理private DataOutputStream dos = null;private DataInputStream dis = null;private Socket s;public Client(Socket s) {this.s = s;try {dis = new DataInputStream(s.getInputStream());dos = new DataOutputStream(s.getOutputStream());bConneted = true;} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {String str;try {while (bConneted) {str = dis.readUTF();messagePane.setText(messagePane.getText()+s.getInetAddress().getLocalHost().getHostName()+" 说:\n "+str+"\n");for(int i = 0;i<clients.size();i++){Client c = clients.get(i);c.send(str);}System.out.println(str);}} catch (EOFException e) {System.out.println("a Client exit!");try {jta.setText(jta.getText()+"    Client "+s.getInetAddress().getLocalHost().getHostName()+" exit!\n");} catch (UnknownHostException e1) {e1.printStackTrace();}} catch (IOException e) {e.printStackTrace();} finally {try {if (dis != null)dis.close();if (s != null)s.close();} catch (IOException e) {e.printStackTrace();}}}//转发聊天信息private void send(String str) {try {dos.writeUTF(s.getInetAddress().getLocalHost().getHostName() +" : "+ str);} catch (IOException e) {clients.remove(this);   //#@&^%%$##  this 是指调用send的对像jta.setText(jta.getText()+"    a client exited when server was sending the message\n");e.printStackTrace();}}}public static void main(String[] args) {new ChatServer().serverInterface(8888);}
}


 

//----------------------------------6chklogin_server.java--------------------------

package server;
/*** 广石化计算机11-3班* choldrim(财俊)* * @author 神奇物种**/
public class Chklogin_server {public Chklogin_server(String qq, String pwd){/*****可用连接数据库或记事本方式验证。。**此处先只用简单的验证带过。。 **/if(!qq.equals("724447804") || !pwd.equals("a")){ChatServer.login_tag = 1;return;}if(qq.equals("724447804") && pwd.equals("a")){ChatServer.login_tag = 2;return;}ChatServer.login_tag = 0;}
}


 

 

 

 

这篇关于java版仿QQ2012源代码分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701188

相关文章

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

什么是 Java 的 CyclicBarrier(代码示例)

《什么是Java的CyclicBarrier(代码示例)》CyclicBarrier是多线程协同的利器,适合需要多次同步的场景,本文通过代码示例讲解什么是Java的CyclicBarrier,感... 你的回答(口语化,面试场景)面试官:什么是 Java 的 CyclicBarrier?你:好的,我来举个例

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

Spring-AOP-ProceedingJoinPoint的使用详解

《Spring-AOP-ProceedingJoinPoint的使用详解》:本文主要介绍Spring-AOP-ProceedingJoinPoint的使用方式,具有很好的参考价值,希望对大家有所帮... 目录ProceedingJoinPoijsnt简介获取环绕通知方法的相关信息1.proceed()2.g