myloginlistener2.java

来自「java+sql 图书管理系统」· Java 代码 · 共 136 行

JAVA
136
字号
package MyLibraryok.MyLogin;

import java.awt.event.*;
import java.sql.*;

import javax.swing.*;

import MyLibraryok.Mydb.*;
import MyLibraryok.MyMain.*;

/**
 * <p>Title: 登陆监听</p>
 *
 * <p>Description:
 * 调用getPassword通常不直接得到JPsswordField的字符串,
 * 因为字符串容易在内存中泄露,有被截获的危险,
 * 所以密码在使用后应该及时清除</p>
 *
 * <p>Copyright: 082401 (c) 2007</p>
 *
 * <p>Company: 清代IT0824</p>
 *
 * @author 侯韶君
 * @version 2.0
 */
public class MyLoginListener2 implements ActionListener {
    MyLogin2 myLogin;


    static int i = 1; //i控制登录次数
    public MyLoginListener2(MyLogin2 myLogin) {
        this.myLogin = myLogin;

    }

    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == myLogin.buttonLogin) {
            login();

        } else if (e.getSource() == myLogin.textUserName) {
            myLogin.password.requestFocus();
        } else if (e.getSource() == myLogin.password) {
            myLogin.buttonLogin.requestFocus();
        }

    }

    /**
     * login
     */
    public String userN;
    public static String userName = null;
    private void login() {
        Mydb db = new Mydb();
        String strFind;
        //把JPasswordField的字符串返回给字符数组
        char[] pw = myLogin.password.getPassword();
        //因为SQL不能用字符数组,所以转换成字符串
        String pass = new String(pw);

        userN = myLogin.textUserName.getText();
        userName = userN;



        //清除内存中的密码
        for (int i = 0; i < pw.length; i++) {
            pw[i] = 0;
        }
        //测试清除成功

//        for(int n = 0; n<pw.length; n++){
//
//            System.out.println("pw" + n + ">>>>" + pw[n]);
//        }
//

        strFind = "select * from users where 用户名='" +
                  userN + "' and 密码='" + new MyPassword().MyPassword(pass) +
                  "'";

        ResultSet re;
        //只能三次输入错误
        if (i != 3) {
            i++;
            //判断用户名和密码是否为空
            if (userN.length() == 0 || pw.length == 0) { //信息提示
                JOptionPane.showMessageDialog(myLogin, "用户名或密码不可以为空:", "消息框",
                                              JOptionPane.OK_CANCEL_OPTION);
            } else {
                try {
                    re = db.sqlcha(strFind);
                    if (re.next()) { //判断密码 是否正确

                        System.out.println("成功");


                          new MainFrame2();
                        myLogin.dispose();
                    } else { //密码错误提示
                        JOptionPane.showMessageDialog(myLogin, "用户名或密码输入错误",
                                "消息框",
                                JOptionPane.OK_CANCEL_OPTION);
                        //选中用户名框中的所有字符,网页上常见效果
                        myLogin.password.setText("");

                        myLogin.textUserName.requestFocus();

                        {
                            myLogin.textUserName.setSelectionStart(0);
                            myLogin.textUserName.setSelectionEnd(myLogin.
                                    textUserName.
                                    getText().
                                    length());

                        }

                    }

                } catch (SQLException es) { //异常错误提示
                    JOptionPane.showMessageDialog(myLogin, "数据库未能连接", "消息框",
                                                  JOptionPane.OK_CANCEL_OPTION);
                    es.printStackTrace();
                }
            }
        } else {
            JOptionPane.showMessageDialog(myLogin, "登录失败", "消息框",
                                          JOptionPane.OK_CANCEL_OPTION);

            System.exit(0);

        }
    }
}

⌨️ 快捷键说明

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