我正在尝试从一个类访问另一个类中的变量。
在下面的例子中,我有两个文件,一个叫做 login.java
以及 usermainpage.java
.
我想访问一个名为 sessionId
那是在 login.java
从 usermainpage
类文件。
我尝试了几种方法,但根本不起作用,在登录类文件中,我声明 sessionId
作为一个 public string
在文件中,我将其定义为等于从数据库中检索到的数据(如果你看到的代码,我正在做一个数据库连接(也)。
我想,通过在函数末尾返回sessionid,我现在可以从所有其他java文件访问这个变量,但在我的 usermainpage.java
文件,我试着打印出来 sessionId
它什么也没显示。告诉我一个解决办法,谢谢。
// login.java file
public class login extends javax.swing.JFrame {
public String sessionId;
Connection con;
PreparedStatement pst;
ResultSet rs;
private String LoginButtonActionPerformed(java.awt.event.ActionEvent evt) {
try{
String query = "SELECT * FROM `accounts` WHERE username=? and password=?";
con = DriverManager.getConnection("jdbc:mysql://localhost/restock", "root", "password");
pst = con.prepareStatement(query);
pst.setString(1, txtUsername.getText());
pst.setString(2, txtPassword.getText());
rs = pst.executeQuery();
if(rs.next()){
String userType = rs.getString("usertype");
sessionId = rs.getString("id");
System.out.print("##########" + sessionId + "##########"); //this prints out the id I want
if(userType.equals("Admin")){
JOptionPane.showMessageDialog(this, "Login is successful as admin");
mainpage admin = new mainpage();
admin.setVisible(true);
dispose();
} else{
JOptionPane.showMessageDialog(this, "Login is successful as user");
usermainpage user = new usermainpage();
user.setVisible(true);
dispose();
}
}
else{
JOptionPane.showMessageDialog(this, "Incorrect username or password");
txtUsername.setText("");
txtPassword.setText("");
}
} catch(HeadlessException | SQLException ex){
JOptionPane.showMessageDialog(this, ex.getMessage());
}
return sessionId;
}
}
//usermainpage.java file
public class usermainpage extends javax.swing.JFrame {
private void RequestButtonActionPerformed(java.awt.event.ActionEvent evt) {
String type = txttype.getSelectedItem().toString();
String name = txtname.getText();
String quantity = txtquantity.getText();
String status = "Pending";
String userId;
//Create new class object from login.java
login testing = new login();
userId = testing.sessionId;
System.out.print("########## " + userId + "########## "); //this prints out null value
}
}
编辑:这些是我根据建议遇到的一些问题。
1条答案
按热度按时间zsbz8rwp1#
你的代码有很多问题:
您应该始终遵循java命名约定,例如,您应该将类命名为
Login
而不是login
. 同样,方法的名称应该是loginButtonActionPerformed
而不是LoginButtonActionPerformed
.我看不出这个参数有什么用处,
java.awt.event.ActionEvent evt
用你的方法,LoginButtonActionPerformed
. 我会把它从定义和调用中删除。你应该避免制造变量
public
. 你应该保持sessionId
作为private
或者protected
根据要求创建public
它的存取器和变异器如下所示:您正在返回
sessionId
从方法上看,LoginButtonActionPerformed
因此你需要在你的方法中调用这个方法,RequestButtonActionPerformed
具体如下:但是,为此,您需要声明您的方法,
LoginButtonActionPerformed
作为public
.更好的方法是
LoginButtonActionPerformed
作为public void
然后你可以做: