我正在开发一个需要登录功能的项目,而且我几乎已经完成了所有工作,并且一直工作到最终检查。无明显原因设置为空的变量
因此,在handleLogin事件下,JavaFX GUI接收用户名和密码的输入,该用户名和密码首先存储在GertLogin类的userU和userP中。然后,输入的用户名将与DBMod的getData方法中的数据库中存在的可用用户名交叉引用。此方法返回与用户输入的用户名相对应的用户名和密码,并将其存储在GetLogin类的dbU和dbP中。那么应该发生什么是两个密码进行比较,如果它们匹配,则登录成功。
但是,在完成getData方法和调用checkData方法之间,变量dbU和dbP都设置为null,并且当userU和userP都存储得很好时,我无法找到它们会做什么的位置或原因。
任何人都可以看到这到底发生了什么,为什么?
首页FXMLController:
package estorage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
public class HomeController implements Initializable {
String username;
String password;
GetLogin login = new GetLogin(username, password);
@FXML
private Label registerPane;
@FXML
private Button btnLogin;
@FXML
private TextField txtUsername;
@FXML
private PasswordField txtPassword;
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
@FXML
private void handleRegisterScreen(MouseEvent event) {
try {
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("Register.fxml"));
Scene scene = new Scene(fxmlLoader.load());
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
((Node)(event.getSource())).getScene().getWindow().hide();
}
catch (IOException e) {
Logger logger = Logger.getLogger(getClass().getName());
logger.log(Level.SEVERE, "Failed to cretae new window", e);
}
}
@FXML
private void handleLogin(ActionEvent event) {
username = txtUsername.getText();
password = txtPassword.getText();
login.userDetails(username, password);
login.getDBDetails(username);
login.getDetails();
login.checkData();
}
DBMOD类:
package estorage;
import java.sql.*;
public class DBMod {
static final String JDBC_DRIVER = "com.exasol.jdbc.EXADriver";
static final String DB_URL = "jdbc:exa:192.168.56.101";
static final String USER = "sys";
static final String PASS = "exasol";
//Add Entry to Database Method
public void Add(String f, String l, String p, String u) {
Connection con = null;
PreparedStatement st = null;
try {
//Register JDBC driver
Class.forName("com.exasol.jdbc.EXADriver");
//Open connection
System.out.println("Connecting to a selected database...");
con = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Connected database successfully...");
//Execute a Query
System.out.println("Adding details...");
String insert = "INSERT INTO ES.USERS (firstname, lastname, username, password)" +
"VALUES (?, ?, ?, ?)";
st = con.prepareStatement(insert);
st.setString(1, f);
st.setString(2, l);
st.setString(3, u);
st.setString(4, p);
st.executeUpdate();
//Extract all records & Update
insert = "SELECT * FROM ES.USERS";
ResultSet rs = st.executeQuery(insert);
while(rs.next()) {
//Retrive data by column name
int id = rs.getInt("id");
String firstName = rs.getString("firstname");
String lastName = rs.getString("lastname");
String username = rs.getString("username");
String password = rs.getString("password");
//Display values
System.out.print("ID: " + id);
System.out.print(", First Name: " + firstName);
System.out.print(", Last Name: " + lastName);
System.out.print(", Username: " + username);
System.out.println(", Password: " + password);
}
rs.close();
}
catch (SQLException se){
se.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(st != null)
con.close();
}
catch(SQLException se) {
}
try {
if(con != null)
con.close();
}
catch(SQLException se) {
se.printStackTrace();
}
}
}
//Get data from Database method
public void getData(String u) {
String username = null;
String password = null;
GetLogin details = new GetLogin(username, password);
Connection con = null;
PreparedStatement st = null;
try {
//Register JDBC driver
Class.forName("com.exasol.jdbc.EXADriver");
//Open connection
System.out.println("Connecting to a selected database...");
con = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Connected database successfully...");
//Execute a Query
System.out.println("Retrieving details...");
String data = "SELECT USERNAME, PASSWORD FROM ES.USERS WHERE USERNAME = ?";
st = con.prepareStatement(data);
st.setString(1, u);
ResultSet rs = st.executeQuery();
while(rs.next()) {
//Retrive data by column name
username = rs.getString("USERNAME");
password = rs.getString("PASSWORD");
//Display values
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println("Send to method");
details.DBDetails(username, password);
System.out.println(username);
System.out.println(password);
System.out.println("End DB Method");
System.out.println();
System.out.println();
System.out.println();
System.out.println();
}
rs.close();
System.out.println(username);
System.out.println(password);
}
catch (SQLException se){
se.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(st != null)
con.close();
}
catch(SQLException se) {
}
try {
if(con != null)
con.close();
}
catch(SQLException se) {
se.printStackTrace();
}
}
}
GetLogin类:
private String u;
private String p;
private String dbU;
private String dbP;
private String userU;
private String userP;
GetLogin(String username, String password){
u = username;
p = password;
}
public void getDBDetails (String u) {
DBMod details = new DBMod();
details.getData(u);
}
public void DBDetails(String username, String password) {
dbU = username;
dbP = password;
System.out.println(dbU);
System.out.println(dbP);
}
public void userDetails(String username, String password) {
userU = username;
userP = password;
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println(userU);
System.out.println(userP);
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
}
public void checkData(){
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println(dbU);
System.out.println(dbP);
System.out.println(userU);
System.out.println(userP);
System.out.println();
System.out.println();
System.out.println();
System.out.println();
if (userU.equals(dbU) && userP.equals(dbP)) {
System.out.println("Sign in Successful!");
}
else {
System.out.println("Incorrect username or password");
}
}
public void getDetails() {
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println(dbU + " " + dbP);
System.out.println();
System.out.println();
System.out.println();
}
这是一个程序,有一半是不是 – ja08prat
为什么你问互联网的问题是......只是用一个调试器一步一步...... – Siyual
是的xD大一个,它非常令人沮丧,有这样一个小小的问题。过去2个小时一直令我疯狂。 –