Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Lentitud al crear ventanas - Java Swing

Hola, estoy utilizando Netbeans y Java Swing para crear mi UI, es una aplicación de escritorio escrita en Java.

La consulta es:
Al crear JInternalFrame que contienen información de una base de datos embebida utilizando Derby, cuando hago un new() en el constructor de ese JInternalFrame hago una consulta a la base de datos que me trae todos los usuarios (por ejemplo) para cargar en un JTable.

Se puede hacer algo al iniciar el programa para que la creacion de esas ventanas no sea tan lenta?
Cada vez que abro una ventana con información traída de la base de datos demora entre 5 y 10 segundos, mucho tiempo.

Espero haber sido claro, agradezco cualquier consejo!

abril 8, 2014 | Registered Commentermartingian

Los procesos lentos, como acceder a una base de datos, o al sistema de archivos, deben realizarse fuera de la tarea específica de Swing/AWT, el EventDispatchThread, precisamente para evitar que se "congele" la Interfase de usuario.

Para ello se debe recurrir a ejecutar esos procesos en tareas paralelas, bien mediante Executor, bien mediante SwingWorker.
Elegir entre uno u otro depende de si el resultado del proceso paralelo debe actualizar el UI o no. En el primer caso se debe utilizar SwingWorker.

http://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

abril 8, 2014 | Registered Commenterchoces

Muchas gracias por la información, voy a implementar SwingWorker y si me funciona lo publico!

abril 8, 2014 | Registered Commentermartingian

Por cierto, Derby es muy lenta.
Te recomendaría que usases HSQLDB: http://hsqldb.org/

SwingWorker funciona muy bien, a condición de que se implemente correctamente :)

abril 8, 2014 | Registered Commenterchoces