While sem parametro

5 respostas
E

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

5 Respostas

T

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 .

E

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.

S

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

Se for hospedado então ein?

vixxiiiiiiiiii

R

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

E

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.

Criado 28 de março de 2016
Ultima resposta 10 de abr. de 2016
Respostas 5
Participantes 4