2017-08-10 41 views
-6

給定一個登錄窗口,它需要來自用戶的2個輸入:用戶名&密碼。 成功識別後,用戶將被重定向到主窗口。 在這裏,我想顯示他或她的用戶名,但我收到空。JAVA - 在類之間傳遞值

這是我當前的代碼: 登錄類:

private void LoginUser(String username, String password) 
{ 
    user = username; 
    pass = password; 
    Connection conn = null; 
    Statement stmt = null; 
    ResultSet rs = null; 

    try 
    { 
     conn = MainEngine.getConnection(); 
     stmt = conn.createStatement(); 
     rs = stmt.executeQuery("SELECT username FROM users WHERE username ='"+user+"' AND password ='"+getMD5Hex(pass)+"'"); 
     if(rs.next()) // Successful login 
     { 
      Window_AfterLogin window_afterlogin = new Window_AfterLogin(); 
      window_afterlogin.setVisible(true); 
      this.dispose(); 
     } 
     else 
     { 
      label_info.setText("Wrong credentials"); 
     } 
    } 
    catch(Exception e) 
    { 
     System.err.println(e); 
    } 
} 

public String getUserName() 
{ 
    return user; 
} 

注:用戶並傳遞變量是全球性的。

Window_AfterLogin類:

public Window_AfterLogin() { 
    initComponents(); 
    Window_Login window_login = new Window_Login(); 
    System.out.println(window_login.getUserName()); 
} 
+0

*對不起,我在標題 – Unrealxqt

+0

*您可以編輯您的問題,並更改標題的不必要的「中」字... –

+0

哪裏是主窗口的代碼? – sForSujit

回答

0

Window_AfterLogin()構造函數初始化另一個Window_Login這意味着在用戶名,你試圖通過window_login.getUserName()檢索 - null

在你登錄後的代碼,你可以添加一個字段username:你LoginUser類中

public Window_AfterLogin{ 
    private String username; 

    public Window_AfterLogin(String username){ 
      initComponents(); 
      this.username = username; 
    } 
} 

,你必須相應地更改代碼:

if(rs.next()) // Successful login 
    { 
     Window_AfterLogin window_afterlogin = new Window_AfterLogin(user); 
     window_afterlogin.setVisible(true); 
     this.dispose(); 
    } 

您的應用程序容易受到SQL注入的影響。請閱讀有關準備好的陳述以及SQL注入在理論上的工作原理並設法阻止它們。

https://de.wikipedia.org/wiki/SQL-Injection https://www.tutorialspoint.com/javaexamples/jdbc_prepared_statement.htm

0

在構造函數中,你所創建的Window_Login類的新實例,而不是設置用戶名。