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数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析