Java - Ayuda con JOptionPane se cierra solo

 
Vista:
sin imagen de perfil

Ayuda con JOptionPane se cierra solo

Publicado por Juan (32 intervenciones) el 02/05/2016 19:22:44
Buenas tardes.

Desde un JDialog quiero que cuando no encuentra un registro en la base de datos, me muestre un mensaje con JOptionPane, diciendo que no se encuentra el registro. Todo funciona perfectamente, pero cuando se tiene que mostrar el mensaje JOptionPane se ve y se cierra en tan solo un segundo, no da tiempo ni a ver lo que pone.

Alguien me puede decir a que es debido este comportamiento? He mirado por todos sitios y no veo que está pasando ni que puedo hacer.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con JOptionPane se cierra solo

Publicado por Angel (1 intervención) el 02/05/2016 21:22:34
Podrías poner la parte del código donde llamas al JOptionPane, para ver que esta sucediendo con la ejecución de tu programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con JOptionPane se cierra solo

Publicado por Juan (32 intervenciones) el 05/05/2016 22:09:45
Buenas noches.

Este es el código que utilizo para mostrar un mensaje.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Usuarios {
	private String lcUsuario;
	private String lcPassword;
	private Conexion mySQL = new Conexion();
	private Connection lcConect;
	private String lcSQL="";
 
	public Usuarios (String lcUsuario, String lcPassword) {
		buscarUsuario(lcUsuario, lcPassword);
 
		this.lcUsuario = lcUsuario;
		this.lcPassword = lcPassword;
	}
 
	public boolean buscarUsuario(String lcUsuario, String lcPassword) {
		boolean llRespuesta = false;
 
		lcSQL = "select * from usuario where usuario = '" + lcUsuario + "' and password = '" + lcPassword + "'";
 
		try {
			Statement st = (Statement) mySQL.getStatement();
			ResultSet rs = mySQL.getQuery(lcSQL);
 
			if (rs.next() == true) {
				llRespuesta = true;
			    JOptionPane.showMessageDialog(null, "SI se encuentra el usuario", "Mensaje Informativo", JOptionPane.INFORMATION_MESSAGE);
			} else {
				llRespuesta = false;
			    JOptionPane.showMessageDialog(null, "NO se encuentra el usuario", "Mensaje Informativo", JOptionPane.INFORMATION_MESSAGE);
			}
		} catch (Exception e) {
 
		}
 
		return llRespuesta;
	}
}

Se muestra el mensaje, pero no da tiempo verlo, dura como 1 segundo en pantalla. No se que puede estar pasando.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con JOptionPane se cierra solo

Publicado por Angel (3 intervenciones) el 06/05/2016 23:19:49
No puedes llamar al JOption desde tu clase Usuario ya que necesita referencia de un Componente padre, ya sea un JFrame, Jdialog
Por eso se muestra muy rapido y se quita.

Te dejo un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
public class Usuarios {
 
    private static String lcUsuario;
    private static String lcPassword;
    private static Connection lcConect;
    //Nuestra consulta es una constante, no cambia y solo es necesario el nombre y la clave
    //Por lo cual no es necesario traer todos los registros de la tabla
    private static final String lcSQL = "select nombre, clave from usuario where usuario = ? and password = ?";
    private static PreparedStatement pstm;
    private static ResultSet rs;
    private static boolean llRespuesta;
 
    public static boolean buscarUsuario(String unlcUsuario, String unlcPassword) {
        try {
            //Llamamos el metodo estatico que devuelve la conexion
           //Este yo lo cree para hacer más fácil la conexión
            lcConect = Conexion.getConexion();
            //Para mayor seguridad ocupamos un preparestatement
            pstm = lcConect.prepareStatement(lcSQL);
            //Les pasamos los parametros de la consulta
            pstm.setString(1, unlcUsuario);
            pstm.setString(2, unlcPassword);
            //Ejecutamos la consulta
            rs = pstm.executeQuery();
            //Buscamos el usuario y la clave
            if (rs.next()) {
                //Almacenamos los datos en las variables de tipo String
                lcUsuario = rs.getString(1);
                lcPassword = rs.getString(2);
            }
            //Hacemos una condicional para verificar exactamente que se el usuario y la contraseña
            //Esto nos devolvera un valor booleano true o false si concuerdan los datos
            llRespuesta = (unlcUsuario.equals(lcUsuario) && unlcPassword.equals(lcPassword));
            //Devolvemos el valor booleano
            return llRespuesta;
        } catch (Exception e) {
            //Capturamos la excepción si la hay
            System.out.println(e.getLocalizedMessage());
            //Y devolvemos el valor booleano en false por la excepción que 
            //Haya ocurrido
            return false;
        }
    }
}

// Y llamas a tu método en tu formulario.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
 * En tu formulario de donde traes los datos
 * Se ocupara el metodo buscarUsuario
 * Se colocara en el evento o donde lo quieras llamar 
 */
miBoton.addActionListener(evt->{
    String us = miTexto.getText().trim();
    String clv = new String(miClave.getPassword());
    if(Usuarios.buscarUsuario(us, clv)) {
    JOptionPane.showMessageDialog(null, "SI se encuentra el usuario", "Mensaje Informativo", JOptionPane.INFORMATION_MESSAGE);
   } else {
   JOptionPane.showMessageDialog(null, "NO se encuentra el usuario", "Mensaje Informativo", JOptionPane.INFORMATION_MESSAGE);
  }
});

Con esto se muestra el mensaje hasta que uno lo quite

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con JOptionPane se cierra solo

Publicado por Juan (32 intervenciones) el 15/05/2016 13:56:59
Muchas gracias por vuestras respuestas. No he podido probar antes, pero estoy probando como me dijiste y me sigue pasando lo mismo.

Pongo todo el código que tengo ahora mismo, para ver si me pueden decir donde está el fallo, o que es lo que puede estar pasando.

Código para la CONEXIÓN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class Conexion {
	private static String lcBaseDatos = "db_appgest";
	private String lcURL = "jdbc:mysql://127.0.0.1/" + lcBaseDatos;
	private String lcUsuario = "root";
	private String lcPassword = "";
	private Connection lcConectar = null;
	private Statement lsState;
 
	public Conexion() {
		try {
			Class.forName("com.mysql.jdbc.Connection");
			lcConectar = (Connection) DriverManager.getConnection(lcURL, lcUsuario, lcPassword);
 
			if (lcConectar != null) {
				System.out.println("Conexión a base de datos" + lcURL + " . . . OK");
			}
 
		} catch(SQLException e) {
			System.out.println("Hubo un problema con la conexión a la base de datos.");
 
		} catch(ClassNotFoundException e) {
 
		}
	}
 
	public ResultSet getQuery(String lcQuery) {
		ResultSet lcResultado = null;
 
		try {
			getStatement();
			lcResultado = lsState.executeQuery(lcQuery);
		} catch (SQLException e) {
 
		}
 
		return lcResultado;
	}
 
	public void setQuery(String lcQuery) {
		try {
			getStatement();
			lsState.execute(lcQuery);
		} catch (SQLException e) {
 
		}
	}
 
	public Statement getStatement() {
		try {
			lsState = (Statement) lcConectar.createStatement();
		} catch (SQLException e) {
 
		}
 
		return lsState;
	}
}

Código para la clase USUARIO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class Usuarios {
	private String lcUsuario;
	private String lcPassword;
	private Conexion mySQL = new Conexion();
	private Connection lcConect;
	private final String lcSQL = "select nombre, clave from usuario where usuario = ? and password = ?";
	private PreparedStatement pstm;
	private ResultSet rs;
 
	public Usuarios (String lcUsuario, String lcPassword) {
		buscarUsuario(lcUsuario, lcPassword);
 
		this.lcUsuario = lcUsuario;
		this.lcPassword = lcPassword;
	}
 
	public boolean buscarUsuario(String lcUsuarioParam, String lcPasswordParam) {
		boolean llRespuesta = false;
 
		try {
            //Para mayor seguridad ocupamos un preparestatement
            pstm = lcConect.prepareStatement(lcSQL);
            //Les pasamos los parametros de la consulta
            pstm.setString(1, lcUsuarioParam);
            pstm.setString(2, lcPasswordParam);
            //Ejecutamos la consulta
            rs = pstm.executeQuery();
 
			if (rs.next() == true) {
                //Almacenamos los datos en las variables de tipo String
                lcUsuario = rs.getString(1);
                lcPassword = rs.getString(2);
			}
 
            //Hacemos una condicional para verificar exactamente que se el usuario y la contraseña
            //Esto nos devolvera un valor booleano true o false si concuerdan los datos
            llRespuesta = (lcUsuarioParam.equals(lcUsuario) && lcPasswordParam.equals(lcPassword));
 
            //Devolvemos el valor booleano
            return llRespuesta;
 
		} catch (Exception e) {
 
		}
 
		return llRespuesta;
	}
}

Y código para cuando introduzco los datos y pulso el botón aceptar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void actionPerformed(ActionEvent e) {
			// Se hace click sobre el botón ACEPTAR
			if (e.getSource() == btnAceptar) {
				Usuarios user = new Usuarios(textField1.getText(), textField2.getText());
 
			    String lcUsu = textField1.getText().trim();
			    String lcPass = textField2.getText();
 
			    if (user.buscarUsuario(lcUsu, lcPass)) {
			        JOptionPane.showMessageDialog(null, "SI se encuentra el usuario", "Mensaje Informativo", JOptionPane.INFORMATION_MESSAGE);
			       } else {
			       JOptionPane.showMessageDialog(null, "NO se encuentra el usuario", "Mensaje Informativo", JOptionPane.INFORMATION_MESSAGE);
			    }
			}
 
			// Se hace click sobre el botón CANCELAR
			if (e.getSource() == btnCancelar) {
				System.exit(0);
			}
		}

La conexión se hace al entrar en la aplicación, para no tener que estar en cada consulta volviendo a conectar.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar