问题描述
- 新人一枚,求大神们帮助,不胜感激
-
import java.util.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.sql.*;
import java.awt.event.*;
import javax.swing.*;
class Loginfrm extends Dialog implements ActionListener
{
JLabel l_name,l_pass,l_error;
JTextField t_name;
JButton b_enter,b_cancle,b_clear;
JPanel pan1,pan2,pan3,pan4;
JPasswordField t_pass;String sname,spass; int sunit; NetConn sql; Statement sqll; ResultSet rs; Librarybox lbox; int until=0; Loginfrm(Frame f,String s) { //界面布局 super(f,s); l_name=new JLabel("名字:"); l_pass=new JLabel("密码:"); l_error=new JLabel("请输入用户名和密码登录"); t_name=new JTextField("",10); t_pass=new JPasswordField("",10); t_pass.setEchoChar('*'); b_enter=new JButton("确定"); b_enter.addActionListener(this); b_cancle=new JButton("取消"); b_cancle.addActionListener(this); b_clear=new JButton("清除"); b_clear.addActionListener(this); pan1=new JPanel(); pan2=new JPanel(); pan3=new JPanel(); pan4=new JPanel(); pan1.add(l_name);pan1.add(t_name); pan2.add(l_pass);pan2.add(t_pass); pan3.add(l_error); pan4.add(b_enter);pan4.add(b_cancle);pan4.add(b_clear); setLayout(new GridLayout(4,1)); add(pan1);add(pan2);add(pan3);add(pan4); //建立数据库连接 sql=new NetConn(); //设置窗口大小 setBounds(400,200,300,300); setVisible(false); } public void actionPerformed(ActionEvent e) { //单击确定按钮的事件处理程序 if(e.getSource()==b_enter) { //如果连续登录次数小于4 if(until<=4) { //如果用户名或者密码为空,将显示提示信息 if(t_name.getText().equals("")||t_pass.getText().equals("")) { l_error.setText("用户名和密码不能为空"); } else { try { sqll=sql.connect(); //根据用户名查询 rs=sqll.executeQuery("SELECT * FROM users where username="+"'"+t_name.getText()+"'"); //遍历查询得到的结果集 while(rs.next()) { sname=rs.getString(2); spass=rs.getString(3); //得到登录用户的级别 sunit=Integer.parseInt(rs.getString(4)); //如果密码正确 if(t_pass.getText().equals(spass)) { //判断用户的级别,根据不同的级别,显示不同的菜单 switch(sunit) { case 1: { l_error.setText("登录成功"); t_name.setText(""); t_pass.setText(""); lbox=new Librarybox(); lbox.bookfi.setEnabled(true); lbox.bookse.setEnabled(true); lbox.bookth.setEnabled(true); lbox.bookfo.setEnabled(true); lbox.mi_system_manger.setEnabled(true); lbox.setVisible(true); this.dispose(); break; } case 2: { l_error.setText("登录成功"); t_name.setText(""); t_pass.setText(""); lbox=new Librarybox(); lbox.bookfi.setEnabled(false); lbox.bookse.setEnabled(false); lbox.bookth.setEnabled(true); lbox.bookfo.setEnabled(false); lbox.mi_system_manger.setEnabled(false); lbox.setVisible(true); this.dispose(); break; } case 3: { l_error.setText("登录成功"); t_name.setText(""); t_pass.setText(""); lbox=new Librarybox(); lbox.bookfi.setEnabled(true); lbox.bookse.setEnabled(false); lbox.bookth.setEnabled(false); lbox.bookfo.setEnabled(true); lbox.mi_system_manger.setEnabled(false); lbox.fi_msglabel_user.setEnabled(false); lbox.setVisible(true); this.dispose(); break; } } } else { l_error.setText("用户名或密码错误!"); until++; } } } catch(SQLException e2) {} } } //超出登录次数 else { l_error.setText("你已经超出登录次数"); t_name.setEnabled(false); t_pass.setEnabled(false); b_enter.setEnabled(false); b_clear.setEnabled(false); } } //单击清除按钮的事件处理程序 else if(e.getSource()==b_clear) { t_name.setText(""); t_pass.setText(""); l_error.setText("请输入用户名和密码登录"); } //单击取消按钮的事件处理程序 else if(e.getSource()==b_cancle) { dispose(); } }
}
但运行时,有错,怎么也改不来
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Loginfrm.actionPerformed(Loginfrm.java:79)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
解决方案
你这个文件79行,是什么内容呢
解决方案二:
sname=rs.getString(2);
spass=rs.getString(3);
//得到登录用户的级别
sunit=Integer.parseInt(rs.getString(4));
这里都好好调试下,天知道你的2 3 4都是什么列,是不是数组,是不是用户名密码,类型是否匹配。
解决方案三:
数据类型是否正确。调试一下
时间: 2024-10-30 17:45:02