2011-01-18 15 views
5

Tengo una aplicación Java que descarga información (Entidades) de nuestro servidor. Utilizo un hilo de descarga para descargar los datos.Java Thread Management y Application Flow

El flujo del proceso de descarga, es el siguiente:

  1. Entrar - La entidad de usuario se descarga
  2. Sobre la base de la entidad de usuario, descarga una lista de 'Comunidad' entidades y mostrar en desplegables
  3. Basada en Comunidad menú desplegable de selección, descarga y montaje 'Org Árbol' en un JTree
  4. sobre la base de la selección de nodo, entidades categoría de descarga y visualización en el menú desplegable
  5. basadas en la categoría selecti en adelante, descarga entidades sub-categoría y exhibición en desplegables
  6. Sobre la base de la selección Categoría Sub descargar gran conjunto de datos y guardarlo

La descarga se produce en un hilo por lo que la GUI no 'congelar'. También me permite actualizar una barra de progreso.

Necesito ayuda con la gestión de este proceso. El principal problema es cuando descargo los datos de la entidad. Tengo que encontrar la manera de esperar a que termine el hilo antes de intentar obtener la entidad y pasar al siguiente paso en el flujo de la aplicación.

Hasta ahora he usado un diálogo modal para controlar el flujo. Comienzo el hilo, aparece un modal y luego desecho el modal cuando el hilo termina. El modal/thread es Observer/Observable. El hilo hace un conjunto cambiado cuando está terminado y el diálogo lo elimina. Mostrar un modal efectivamente detiene el flujo de la aplicación para que pueda esperar a que finalice la descarga.

También intenté simplemente mover todo el flujo de trabajo a Observadores. Toda la GUI relevante en el proceso son observadores. Cada método de actualización espera a que termine la descarga y luego llama a la siguiente pieza de la GUI que realiza su propia descarga.

Hasta ahora encontré que estos dos métodos producen código que es difícil de seguir. Me gustaría 'centralizar' este flujo de trabajo para que otros desarrolladores no se quiten el cabello cuando intentan seguirlo.

Mi pregunta es: ¿Tiene alguna sugerencia o ejemplos en los que un flujo de trabajo como este pueda manejarse de manera que produzca código que sea fácil de seguir?

Sé que 'fácil' es un término relativo y sé que mis dos opciones ya funcionan, pero me gustaría obtener algunas ideas de otros programadores mientras todavía tengo tiempo para cambiarla.

Muchas gracias.

Respuesta

0

Debe crear un "modelo" para su vista, que represente el estado actual de su aplicación. Para un árbol, p. es razonable mostrar un nodo "Cargando" cuando alguien abre un treenode, porque sino la GUI se bloquea al abrir un nodo.

Si el hilo de carga termina de cargar el nodo, el nodo "Cargando" se reemplaza con los resultados de la acción asincrónica.Esto hace que sea más fácil abrir múltiples nodos en paralelo, porque los subprocesos de trabajo son solo responsables de un solo nodo secundario.

Similar al descargar algo: los trabajadores luego actualizan el progreso de la descarga. Las descargas-Diálogo de Firefox vienen a la mente aquí.

Las buenas GUIs no son fáciles :).