Boa tarde. Sou iniciante no java tenho essa duvida. Tenho uma classe UsuadioDAO a qual faz a verificação do login e um jframe Login. Roda tudo bem agora, mas quando chega na parte de fechar o jFrame login (new FrmLogin().dispose();) não fecha o que poderia ser???
public void logar(UsuarioBean usBean) {
try {
String sql = "select * from usuario where apelido=? and senha=?";
PreparedStatement pst = getCon().prepareStatement(sql);
pst.setString(1, usBean.getApelido());
pst.setString(2, usBean.getSenha());
ResultSet rs = pst.executeQuery();
if (rs.next()) {
// nivel de acesso
//Verifica o campo nivel_acesso
String nivel = rs.getString(6);
if (nivel.equals("admin")) {
new FrmLogin().dispose();
new FrmMain().setVisible(true);
} else {
new FrmLogin().dispose();
new FrmMain().setVisible(true);
}
} else {
FrmLogin.lblInfor.setText("Usuário e/ou Senha Invalido");
FrmLogin.lblInfor.setForeground(Color.red);
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
}
Ao executar: new FrmLogin().dispose();, na verdade você está criando uma outra janela FrmLogin e já fechando em seguida (por conta do new). Caso tenha alguma outra instância de FrmLogin, ela continuará aberta.
Você tem que executar o comando de fechar (dispose) na instância da janela atual e não criar uma nova instância dela.
Obrigado lucastody acabei de fazer a alteração no código funcionou perfeitamente
basicamente modifiquei o código do UsuadioDAO para:
public String logar(UsuarioBean usBean) {
String usuario = null;
try {
String sql = “select * from usuario where apelido=? and senha=?”;
PreparedStatement pst = getCon().prepareStatement(sql);
pst.setString(1, usBean.getApelido());
pst.setString(2, usBean.getSenha());
ResultSet rs = pst.executeQuery();
if (rs.next()) {
String nivel = rs.getString(6);
if (nivel.equals(“admin”)) {
usuario = “admin”;
} else {
usuario = “user”;
}
} else {
FrmLogin.lblInfor.setText(“Usuário e/ou Senha Invalido”);
FrmLogin.lblInfor.setForeground(Color.red);
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
return usuario;
}
e no meu jFrame login um botão com evento contendo esse código
Connection con;
con = Conexao.conectorMysql();
UsuarioBean ub = new UsuarioBean();
UsuarioDAO ud = new UsuarioDAO(con);
ub.setApelido(txtUsuario.getText());
ub.setSenha(txtSenha.getText());
ud.logar(ub);
String res = ud.logar(ub);
System.out.println(res);
if (null == res) {
lblInfor.setText(“Usuário não existe”);
}else switch (res) {
case “admin”:
dispose();
new FrmMain().setVisible(true);
break;
case “user”:
dispose();
new FrmMain().setVisible(true);
break;
default:
break;
}
con.close();
não sei se está 100% o código mais funcionou perfeitamente