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);
}
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.
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: