Problema com variável passada do Jframe

Estou fazendo uma tela de login, só que estou tendo um problema que é quando eu pego o que ta escrito no meu JtextField e levo para minha função de verificação ele não funciona, quando eu crio uma variável String ou mesmo ponho uma string direto no parâmetro da função ele dá certo, ou seja o problema é com a variável, o que pode ser e como posso resolver? segue uma parte do código para ficar mais claro.

PS: eu ja fiz sem o for tbm apenas pegando a posição 0 da lista mas também dá erro quando chega na linha que faz isso

public static Boolean Botao_Login(String login, String password){ //este "login" vem do JtextField, assim como o password vem de um passwordField

    boolean key = false;
    //System.out.println(login +" "+ password);
    String teste = login; //quando eu faço uma string aqui ele funciona, porem quando eu uso o login não vai, nem com o "teste" recebendo, nem diretamente no parâmetro
    String teste2 = "123";
    try {
        List<Login> clienteList = Login_DB.search_by_login_Prepared_Statement(teste);
        System.out.println("TESTE");
        for(int i = 0; i < clienteList.size(); i++) {//Ele começa a dar erro nessa linha, porém quando é uma string normal criada nesse metodo funciona.
            Login C = clienteList.get(i);
            if(teste.equals(C.getLogin()) && teste2.equals(C.getPassword())){
                return key = true;
            }
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "ERROR", "Aviso", JOptionPane.ERROR_MESSAGE);
    }
    return key;         
}

como é passado o parâmetro do Jframe

if(Login_Button.Botao_Login(txtLogin.getText(), new String(txtpassword.getPassword())) == true){            
        JOptionPane.showMessageDialog(null, "Login realizado com sucesso!", "Mensagem", JOptionPane.DEFAULT_OPTION);
                
}else {
        JOptionPane.showMessageDialog(null, "Usuário ou senha incorretos!", "Aviso", JOptionPane.WARNING_MESSAGE);
}

Segue a função de busca

public static List<Login> search_by_login_Prepared_Statement (String login) {
    
    String sql = "SELECT login, password FROM DB_Estoque.Login_Table where login like ?";
    Connection conn = Conexao.getConnection(); //Abrindo conexão
    List<Login> ListaLogin = new ArrayList<>();
    
    try {
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, login);
        ResultSet rs = ps.executeQuery();
        while(rs.next()) {
            ListaLogin.add(new Login(rs.getString("login"), rs.getString("password")));
        }
        Conexao.Fechar_Conexao(conn, ps, rs); //Fechando conexão
        return ListaLogin;
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
    
}