Foro de elhacker.net

Programación => Java => Mensaje iniciado por: RyogiShiki en 15 Noviembre 2011, 01:14 am



Título: [SOLUCIONADO] [Duda] De Threads, Swing, y Non Blocking Calls
Publicado por: RyogiShiki en 15 Noviembre 2011, 01:14 am
Hola Que tal.

Bueno éste es el caso: Tengo dos clases. La primera es un parser XML hecho con SAX. La segunda es una UI hecha en Swing (nada complejo, un JTextField, un JButtony JLabels). Ahora como bien sabemos dentro del EDT (Event Dispath Thread) se realizan todas las operaciones que tienen que ver con el manejo de la GUI por parte de Swing, por lo que no es buena idea hacer llamadas o código bloqueante o si no la UI deja deja de responder. todas las llamadas de este tipo deben ir en un nuevo hilo dentro del método run(). En la clase que parsea el XML se realizan llamadas bloqueantes por lo que se encuentran en un hilo, esta clase se encarga de analizar un archivo XML y llenar sus atributos con la información encontrada. En la clase donde está definida la UI tengo un botón, que se encarga de tomar los datos del JTextField y mandarlos a una búsqueda en el parser. Dentro de la clase que maneja la interfaz gráfica también existe un método que se encarga de mostrar por pantalla los datos recolectados por el parser. Aquí es donde está el problema, y es que no se en que momento llamar a esta función, ya que solo debe ser llamada en el momento en el que el Thread del parser ha terminado, de lo contrario los datos no se muestran correctamente. Y es lo que no he logrado hacer. ¿Cómo hago para llamar el método justo cuando el Thread del parser termina y así mostrar los datos encontrados por pantalla?

Gracias a todos de antemano.


Título: Re: [Duda] De Threads, Swing, y Non Blocking Calls
Publicado por: RyogiShiki en 15 Noviembre 2011, 14:56 pm
Bueno. Al final lo he resulto. La solución a mis problemas: SwingWorker, que me permite hacer la BlockingCall sobrescribiendo el método doInBackground(), y sobrescribiendo el método done() que se ejecutará en el EDT una vez doInBackground haya finalizado. Así que doy este tema por terminado.