package HotelManage;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.awt.*;
public class Login {
public Connection conn = null;
public Statement sm = null;
public ResultSet rs = null;
JFrame f = new JFrame("酒店管理系统");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JPanel p = new JPanel(new GridLayout(3, 1, 20, 5));
JLabel l1 = new JLabel("账号:");
JLabel l2 = new JLabel("密码:");
JTextField tf1 = new JTextField(10);
JPasswordField tf2 = new JPasswordField(10);
JRadioButton rb1 = new JRadioButton("顾客");
JRadioButton rb2 = new JRadioButton("管理员");
JButton b1 = new JButton("登录");
JButton b2 = new JButton("注册");
JButton b3 = new JButton("退出");
Login() {
f.setSize(300, 200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocation(600, 200);
f.setVisible(true);
f.setResizable(false);
f.add("Center", p);
f.add("South", p3);
rb1.setSelected(true);
ButtonGroup bg = new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
p1.add(l1);
p1.add(tf1);
p2.add(l2);
p2.add(tf2);
p4.add(rb1);
p4.add(rb2);
p3.add(b1);
p3.add(b2);
p3.add(b3);
p.add(p1);
p.add(p2);
p.add(p4);
Action act = new Action();
b1.addActionListener(act);
b2.addActionListener(act);
b3.addActionListener(act);
tf2.addActionListener(act);
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=HotelManage", "sa","12348765");
if(conn==null) System.out.println("fuck");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
private class Action implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1 ||e.getSource()==tf2) {
try{
sm = conn.createStatement();
if(sm==null) System.out.println("shit");
String um = tf1.getText();
String ps = String.valueOf(tf2.getPassword());
String str;
if (rb1.isSelected() == true)
str = "select count(*) from Customer where username='" + um + "' and password='" + ps + "'";
else
str = "select count(*) from Manager where username='" + um + "' and password='" + ps + "'";
rs = sm.executeQuery(str);
rs.next();
if (rs.getInt(1) > 0) {
new CustomerInfo();
f.dispose();
} else {
new JOptionPane().showMessageDialog(null, "账号或密码错误,请重新输入!");
tf1.setText(null);
tf2.setText(null);
}
}catch (SQLException e1) {
e1.printStackTrace();
} finally {
try {
if (sm != null) {
sm.close();
sm=null;
}
if (rs != null) {
rs.close();
rs = null;
}
} catch (SQLException e2) {
e2.printStackTrace();
}
}
} else if (e.getSource() == b3) {
try{
conn.close();
conn=null;
}catch(SQLException e3){
e3.printStackTrace();
}
System.exit(0);
} else {
new Register();
}
}
}
private class Register {
JFrame fr=new JFrame("用户注册");
JLabel lr1=new JLabel("账号:");
JLabel lr2=new JLabel("密码:");
JLabel lr3=new JLabel("确认密码:");
JLabel lr4=new JLabel("该账号已注册!");
JTextField tfr=new JTextField(10);
JPasswordField pf1=new JPasswordField(10);
JPasswordField pf2=new JPasswordField(10);
JPanel pr1=new JPanel();
JPanel pr2=new JPanel();
JPanel pr3=new JPanel();
JPanel pr4=new JPanel();
JButton br1=new JButton("注册");
JButton br2=new JButton("取消");
Register(){
fr.setLayout(new GridLayout(4,1,20,20));
fr.setSize(300, 200);
fr.setLocation(500,200);
fr.setVisible(true);
fr.setResizable(false);
fr.add(pr1);
fr.add(pr2);
fr.add(pr3);
fr.add(pr4);
pr1.add(lr1); pr1.add(tfr); pr1.add(lr4);
pr2.add(lr2); pr2.add(pf1);
pr3.add(lr3); pr3.add(pf2);
pr4.add(br1); pr4.add(br2);
}
}
public static void main(String[] args) {
new Login();
}
}
账号密码输入为空时第一次点击登录有时会报
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at HotelManage.Login$Action.actionPerformed(Login.java:71)
有时就不会。然后后面的点击都不会出现空指针错误。
错误指向sm = conn.createStatement();但是下面的if(sm==null)并没有执行啊。
本来没有添加Register类的时候是没有问题的,但是添加后就有问题了。