tengo una app (anda peeeero) que quiero agregarle cuando inicia un progressbar simple (hasta que carga los datos de usuario y pass con hibernate para loggear el usuario).
pero no logro hacer que corra el progressbar y a la par inicie y cargue el hibernate con los usuarios existentes para hacer la prueba de usuarios correctos/invalidos.
el progress con correr y cerrarse ya esta, es solo para distraer al usuario minetras se inicia el hibernate. (me hace una ejecución lineal... corre el progress y cuando termina comienza a cargar los user-pass)
Código Ventana del loggin:
Ver original
package Presentacion.Login; import javax.swing.*; import org.hibernate.Query; import org.hibernate.Session; import Fisica.SessionFactoryUtil; import Hibernate.Usuario; import Presentacion.Main.Principal; import Presentacion.Login.Progress; import java.io.*; import java.util.Iterator; import java.util.List; import java.awt.*; import java.awt.event.*; public class VentanaLogin extends JFrame { private JTextField txtUser, txtPass; private JLabel lblUser, lblPass; private JButton btnAceptar, btnCancelar; String usuario, elPassword; public int user; public String titulo; List<Usuario> listUser; public VentanaLogin() { Progress p = new Progress(); p.verBarra(); listUser = this.consultaUser(); Container contenedor = getContentPane(); contenedor.setLayout(new FlowLayout()); // crear etiqueta y cuadro de texto del usuario txtUser = new JTextField(10); lblUser = new JLabel("Usuario: "); txtUser.setToolTipText("Escriba su nombre de usuario"); contenedor.add( Box.createVerticalStrut(50) ); contenedor.add(lblUser); contenedor.add(txtUser); //crear etiqueta y cuadro de texto del pw txtPass = new JPasswordField(10); lblPass = new JLabel("Contraseña: "); txtPass.setToolTipText("Escriba su contraseña"); contenedor.add(lblPass); contenedor.add(txtPass); //Crear y agregar los botones btnAceptar = new JButton("Aceptar"); //establecer Boton aceptar por defecto getRootPane().setDefaultButton(btnAceptar); btnCancelar = new JButton("Cancelar"); contenedor.add(btnAceptar); contenedor.add(btnCancelar); // Crear un escuchador al boton Aceptar ActionListener escuchadorbtnAceptar = new ActionListener() { public void actionPerformed(ActionEvent evt) { try { //chekar si el usuario escrbio el nombre de usuario y pw if (txtUser.getText().length() > 0 && txtPass.getText().length() > 0 ) { // Si el usuario si fue validado correctamente if( validarUsuario( txtUser.getText(), txtPass.getText() ) ) //enviar datos a validar { // Codigo para mostrar la ventana principal // setVisible(false); dispose(); Principal ventana1 = new Principal(user, titulo.toUpperCase()); } else { JOptionPane.showMessageDialog(null, "El nombre de usuario y/o contrasenia no son validos."); // JOptionPane.showMessageDialog(null, txtUser.getText()+" " +txtPass.getText() ); txtUser.setText(""); //limpiar campos txtPass.setText(""); txtUser.requestFocusInWindow(); } } else { JOptionPane.showMessageDialog(null, "Debe escribir nombre de usuario y contrasenia.\n" + "NO puede dejar ningun campo vacio"); } } catch (Exception e) { e.printStackTrace(); } } }; btnAceptar.addActionListener(escuchadorbtnAceptar); // Asociar escuchador para el boton Aceptar // Agregar escuchador al boton Cancelar ActionListener escuchadorbtnCancelar=new ActionListener() { public void actionPerformed(ActionEvent evt) { System.exit(0); // terminar el programa } }; btnCancelar.addActionListener(escuchadorbtnCancelar); // Asociar escuchador para el boton Cancelar setTitle("Autentificacion de usuarios"); setSize(400,150); // Tamaño del Frame setResizable(false); // que no se le pueda cambiar el tamaño //Centrar la ventana de autentificacion en la pantalla Dimension tamFrame=this.getSize();//para obtener las dimensiones del frame Dimension tamPantalla=Toolkit.getDefaultToolkit().getScreenSize(); //para obtener el tamanio de la pantalla setLocation((tamPantalla.width-tamFrame.width)/2, (tamPantalla.height-tamFrame.height)/2); //para posicionar setVisible(true); // Hacer visible al frame } // fin de constructor //prueba hilo de ejecucion boolean validarUsuario(String elUsr, String elPw) throws IOException { try { Iterator<Usuario> i = listUser.listIterator(); Usuario u; usuario = elUsr.toLowerCase(); elPassword = elPw.toLowerCase(); while (i.hasNext()) { u = i.next(); if(u.getUser().equals(usuario) && u.getPass().equals(elPassword)){ this.user = u.getKey(); this.titulo = u.getUser().toUpperCase(); return true; } } return false; //usuario validado incorrectamente } catch (Exception e) { e.printStackTrace(); return false; } } public List<Usuario> consultaUser(){ Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); List<Usuario> list = null; Query query = session.createQuery("from Usuario"); list = query.list(); session.getTransaction().commit(); SessionFactoryUtil.getSessionFactory().close(); return list; } public static void main(String[] args) { VentanaLogin prueba = new VentanaLogin(); prueba.setDefaultCloseOperation(prueba.EXIT_ON_CLOSE); } }
Código Clase Progress:
Ver original
package Presentacion.Login; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Progress extends JFrame { JProgressBar current; JTextArea out; JButton find; Thread runner; int num = 0; static int x, y; public Progress() { super("Cargando"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel pane = new JPanel(); pane.setLayout(new FlowLayout()); current = new JProgressBar(0, 2000); current.setValue(0); current.setStringPainted(true); pane.add(current); setContentPane(pane); } public void iterate() { while (num < 2000) { current.setValue(num); try { Thread.sleep(90); } catch (InterruptedException e) { } num += 95; } } public static void tamaño() { //Obtiene el tamaño de la pantalla Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //obtiene la resolucion de la pantalla en PPP (Puntos por pulgada) int sr = Toolkit.getDefaultToolkit().getScreenResolution(); x = d.width; y = d.height; } public void verBarra() { tamaño(); Progress frame = new Progress(); frame.pack(); frame.setVisible(true); frame.setLocation(2*x/5, 2*y/5); frame.iterate(); frame.setVisible(false); } public static void main(String[] arguments) { tamaño(); Progress frame = new Progress(); frame.pack(); frame.setVisible(true); frame.setLocation(2*x/5, 2*y/5); frame.iterate(); frame.setVisible(false); } }
no se si me explico bien, lo que necesito es que corra el progress mientras se van cargando los usuarios y pass en memoria, para cuando abre la ventana de LOGGIN.
(si la ventana de PROGRESS sigue corriendo no importa, quedria atras de la de LOGGIN y cuando termina el progress se cierra, atras del LOGGIN y no se ve.) para luego validar cuando ingresa el usuario. Es mas para que el usuario no rompa los quinotos que el sistema no le responde o esta lento cuando lo inicia. Mostrarle algo que el sistema esta arrancando.
Bueno espero comentario si se puede mejorar u otra idea mejor, de alguien que haya pasado por esto.
Saludos, y desde ya muchas gracias.