Hola amigos, necesito una mano con lo siguiente.
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 originalpackage 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 originalpackage 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.