While sem parametro

Pessoal, estou com problema no comando while. Pq o exemplo 1 funciona perfeitamente e o exemplo 2 o java não lê as duas últimas linhas depois de encerrar o while!? (o print “saiu do loop” e habilitar o frmControleFinanceiro) sendo que o exemplo 2 apenas deixei todo o conteúdo do while como comentário “//”.

Para melhor entenderem, tem um JFrame principal que chama um outro JFrame para validação de senha. A variável “usuarioLogado” tem seu valor inicial “false” e se o usuário digitar a senha correta o segundo JFrame altera o conteúdo da variável usuarioLogado para true, e adicionei o while para o java ficar aguardando a resposta do segundo frame e só avançar qdo a senha estiver correta ou ele fechar o programa.

Exemplo 1:

    // Verificando Condições para Login
    verificaLogin();
    window.frmControleFinanceiro.setEnabled(false); // desabilita o jframe principal
    int x = 0;
    while(usuarioLogado == false){
        //Loop para aguardar a validação do usuario.
        System.out.println(x);
        x++;
     } 
    System.out.println("saiu do loop");
    window.frmControleFinanceiro.setEnabled(true); // habilita o jframe principal
}

Exemplo 2:

    // Verificando Condições para Login
    verificaLogin();
    window.frmControleFinanceiro.setEnabled(false); // desabilita o jframe principal
  //  int x = 0;
    while(usuarioLogado == false){
        //Loop para aguardar a validação do usuario.
        //System.out.println(x);
        //x++;
     } 
    System.out.println("saiu do loop");
    window.frmControleFinanceiro.setEnabled(true); // habilita o jframe principal
}

Tem alguma outra forma de fazer isso? de forma mais simplificada!?
Ia fazer com o Thread, mas ainda é hard para mim!! rsrs
Obrigado

Tem man voce nao implementou a função que o laco vai executa no segundo exemplo… voce botou enquanto usuarioLogado for igual a falso e dentro do corpo deixou vazio .

O problema é que independente do que coloco dentro do while, o java não lê o conteúdo:

Fiz assim tb e ele não executa a linha de comando dentro do while:

    verificaLogin();
    window.frmControleFinanceiro.setEnabled(false);
    while(usuarioLogado == false){
        if (usuarioLogado == true){
            System.out.println("saiu");
            window.frmControleFinanceiro.setEnabled(true);
        };
        //Loop para aguardar a validação do usuario.
        //System.out.println(x);
        //x++;
     } 
    System.out.println("saiu do loop");
    //window.frmControleFinanceiro.setEnabled(true);

tentei assim:

    window.frmControleFinanceiro.setEnabled(false);
    verificaLogin();
    do {
        if (usuarioLogado == true){
            System.out.println("saiu");
            window.frmControleFinanceiro.setEnabled(true);
        };
        //Loop para aguardar a validação do usuario.
        //System.out.println(x);
        //x++;
     } while(usuarioLogado == false);
    System.out.println("saiu do loop");
    //window.frmControleFinanceiro.setEnabled(true);
}

e os dois códigos fontes que ele chama são:

public static void verificaLogin(){
    BDados xUsuario = new BDados();
    int totalUsuarios = xUsuario.BD_ContarReg("usuario");
    if (totalUsuarios == 0){
        //Carrega formulário para inclusão de usuários
        FormUsuarios xFormUsuario = new FormUsuarios();
        xFormUsuario.setAutoRequestFocus(true);
        xFormUsuario.setLocationRelativeTo(null);
        xFormUsuario.setVisible(true);
        xFormUsuario.setAlwaysOnTop(true);
        
    }else{
        //Abre formulário para verificação de login
        FormSenha xFormSenha = new FormSenha();
        xFormSenha.setAutoRequestFocus(true);
        xFormSenha.setLocationRelativeTo(null);
        xFormSenha.setVisible(true);
        xFormSenha.setAlwaysOnTop(true);
    }

e o método xFormSenha():

    JButton btnEntrar = new JButton("Entrar");
    btnEntrar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            BDados login = new BDados();
            boolean retornoSenha = login.BD_Login("usuario", "nome_usuario", txtUsuario.getText().trim(), "senha_usuario", txtSenha.getText().trim());
            System.out.println(MeuControle.usuarioLogado);
            if (retornoSenha == true){
                System.out.println("senha verdadeira");
                MeuControle.usuarioLogado = true;
                dispose();
            }else{
                System.out.println("senha falsa");
                txtSenha.setText(null);
                txtUsuario.setText(null);
                txtUsuario.requestFocus();
                MeuControle.usuarioLogado = false;
                
            }
        }

Ou seja, ele não entra no while (que verifica primeiro a condicionante para depois executar as suas linhas de comando), nem o do/while… que executa as linhas de comando e só depois verifica a condicionante.

Caraca fico a pensar a carga que esse while vai gerar no servidor…

Se for hospedado então ein?

vixxiiiiiiiiii

Se ele não entra no while deve tá setando tua variável errado.

Resolvi meu problema acrescentando uma linha de delay. Sinceramente, não entendi pq precisa de tudo isso. Sou novato em java e vou aprendendo novos comandos, quem sabe no final dos meus estudos consiga resolver esse problema de outra forma. Pelo menos desempaquei!! rsrs. Segue como ficou meu while:

    while(usuarioLogado == false) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (usuarioLogado == true){
            window.frmControleFinanceiro.setEnabled(true);
            window.frmControleFinanceiro.setAlwaysOnTop(true);
            txtDataPrevista.setVisible(true);
        }
     };
    System.out.println("saiu do loop");

De qualquer forma, grato pela ajuda.