Java GUI登录功能触发NullPointerException问题求助
登录界面点击按钮触发NullPointerException问题
我设计了一个登录界面,用于将用户输入的信息与数据库中的信息进行比对。点击登录按钮时出现了NullPointerException,我知道这个异常是调用无值变量导致的,但已经确认输入的变量存在有效值。
问题代码
private void admin_loginActionPerformed(java.awt.event.ActionEvent evt) { // 存储输入的用户名和密码,用于和数据库比对 String namee = name_admin.getText(); int pass = Integer.parseInt(pass_admin.getText()); try { // 第128行 pre = con.prepareStatement("Select * from adminn where adm_name='" + namee + "' and adm_password='" + pass + "'"); ru = pre.executeQuery(); if (ru.next()) { System.out.println("login done"); } else { System.out.println("login faild"); } } catch (Exception er) { er.printStackTrace(); System.out.println(er); } } private void back_libActionPerformed(java.awt.event.ActionEvent evt) { library ii = new library(); dispose(); ii.setVisible(true); }
异常信息
java.lang.NullPointerException java.lang.NullPointerException at ad_login.admin_loginActionPerformed(ad_login.java:128)
问题排查与解决
核心原因:第128行的
con(数据库连接对象)为null。你确认了输入变量有效,但忽略了数据库连接对象是否完成初始化——如果con没被正确实例化、未建立连接就调用prepareStatement,必然触发NPE。解决步骤:
- 检查
con对象的初始化逻辑,确保在调用admin_loginActionPerformed方法前,已经通过JDBC完成了数据库连接(比如在窗体构造方法、init方法中执行连接代码),保证con不是null。 - 修复SQL注入风险:不要直接拼接字符串生成SQL,改用PreparedStatement的参数绑定方式,代码更安全也更规范:
pre = con.prepareStatement("Select * from adminn where adm_name=? and adm_password=?"); pre.setString(1, namee); // 如果数据库中密码是字符串类型,这里应该用setString,同时把pass改成String类型接收 pre.setInt(2, pass); - 注意密码类型:如果数据库中
adm_password是字符串类型(比如varchar),不要将输入的密码转成int,直接用String pass = pass_admin.getText()接收,避免不必要的类型转换错误。
- 检查
内容的提问来源于stack exchange,提问作者Ahmed_tarek
相关产品推荐
相关产品推荐

