Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java set()方法接收值,但get()方法返回null_Java_Null_Setter_Getter - Fatal编程技术网

Java set()方法接收值,但get()方法返回null

Java set()方法接收值,但get()方法返回null,java,null,setter,getter,Java,Null,Setter,Getter,我正在创建一个登录页面,它从数据库中检索用户详细信息并存储在用户类中。Set方法正确地接收值,但是当我尝试使用Get方法访问细节时,它返回null。请参阅下面的代码片段,您能否让我知道我在这里遗漏了什么 从数据库检索详细信息并设置值: 类userdao: user.setID(rs.getString("ID")); user.setHashPassword(rs.getString("HashPassword")); user.setAccessLevel(rs.getInt("AccessL

我正在创建一个登录页面,它从数据库中检索用户详细信息并存储在用户类中。Set方法正确地接收值,但是当我尝试使用Get方法访问细节时,它返回null。请参阅下面的代码片段,您能否让我知道我在这里遗漏了什么

从数据库检索详细信息并设置值:

类userdao:

user.setID(rs.getString("ID"));
user.setHashPassword(rs.getString("HashPassword"));
user.setAccessLevel(rs.getInt("AccessLevel"));
user.setLastDate(rs.getDate("LastAccessDate"));
注意:此点后连接关闭

设置值:

类用户:

public class User  
{
    private String ID;
    private String HashPassword;
    private int AccessLEVEL;
    private Date LastAccessDate;

    public User()
    {

    }

    public void setID(String uID) 
    {
        this.ID = uID;
    }    
    public String getID()
    {
        return this.ID;
    }
    public void setHashPassword(String uHash) 
    {
        this.HashPassword = uHash;
    }    
    public String getHashPassword()
    {
        return this.HashPassword;
    }
    public void setAccessLevel(int uALevel) 
    {
        this.AccessLEVEL = uALevel;
    }    
    public int getAccessLevel()
    {
        return this.AccessLEVEL;
    }
    public void setLastDate(Date uLDate) 
    {
        this.LastAccessDate = uLDate;
    }    
    public Date getLastDate()
    {
        return this.LastAccessDate;
    }
}
我正在从另一个接收null的类访问get()值

类登录:

System.out.println(user.getID()); // returning null
System.out.println(user.getHashPassword()); // returning null
System.out.println(user.getAccessLevel()); // returning null
System.out.println(user.getLastDate()); // returning null
但是,当我在userdao类中创建变量(DB在其中返回详细信息)并从login类调用它们时,值会正确返回

你能帮我找出这段代码中的错误吗

下面是login和userdao类的完整代码

public class Login extends javax.swing.JFrame
{
    User user = new User();
    static String strUserID;
    static String strPwd;

    public Login()
    {
        super();
        initComponents();
        //JFrame jfrm = new JFrame("Login");       
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        PasswordEncrypt cpe = new PasswordEncrypt();
        User user = new User();
        UserDAO uDAO = new UserDAO();

        strUserID = jTextField1.getText();
        char[] pwd = jPasswordField1.getPassword();
        strPwd = new String(pwd);

        if (strUserID.isEmpty())
        {
            JOptionPane.showMessageDialog(null, "Please Enter The User ID");
            jTextField1.requestFocusInWindow();
        }
        else if (pwd.length == 0)
        {
            JOptionPane.showMessageDialog(null, "Please Enter The Password");
            jPasswordField1.requestFocusInWindow();
        }
        else
        {
            try
            {
                // Authenticate the User
                String strStoredPwd;
                boolean UserExists;

                uDAO.Authenticate(strUserID);

                strStoredPwd = uDAO.dhash;
                // The following lines are used only when the User class is returning a value
                System.out.println(user.getID());
                System.out.println(user.getHashPassword());
                System.out.println(user.getAccessLevel());
                System.out.println(user.getLastDate());                
                UserExists = cpe.validatePassword(strPwd, strStoredPwd);
            }
        }
    }
}


几乎可以肯定,您使用的是两个不同的对象。以下是您可以测试的方法:

userdao
中,添加:

System.out.format("userdao: %d%n", System.identityHashCode(user));
并在
登录
中添加相同的

System.out.format("login: %d%n", System.identityHashCode(user));

由于您尚未粘贴相关代码,因此很难找出确切的问题所在,但这应该会让您走上正确的道路。

将类
UserDAO
Authenticate()
方法的返回类型更新为

公共用户身份验证(字符串UserID)
//设置值后返回用户对象

当您从class
Login
调用上述方法时,现在它将返回
User
类的对象,您已经在其中设置了值,现在代码将更新如下:

user = uDAO.Authenticate(strUserID);

您在设置和获取值时使用了相同的user对象??您如何知道这些值正在被设置?我在userdao和login类中都有这样的语句:user user=new user();您正在使用Hibernate和spring事务吗?我认为会话在dao中是关闭的,当您在视图中访问时,您会得到空值。请查看hibernateSessioninViewFilter示例,通过这些示例,您可以在视图中访问hibernate会话,即使您使用的是两个不同的objects@user3315146补充答案,我想它会对你有用
user = uDAO.Authenticate(strUserID);