2011-01-18 22 views
5

Possiedo un'applicazione Java che scarica informazioni (entità) dal nostro server. Io uso un thread di download per scaricare i dati.Flusso Java Gestione e flusso applicazioni

Il flusso del processo di download è il seguente:

  1. Login - L'entità utente viene scaricato
  2. Sulla base l'impresa utilizzatrice, scaricare una lista di entità 'Comunità' e Display in discesa
  3. sulla base comunitaria discesa selezione, download e show 'Org Tree' in una JTree
  4. sulla base di selezione del nodo, entità scaricare Categoria e la visualizzazione in discesa
  5. sulla base Categoria Selecti on, scaricare Categoria entità e display secondario in discesa
  6. Sulla base di selezione Sub Categoria scaricare un grande insieme di dati e salvarlo

Il download avviene in un thread in modo l'interfaccia grafica non fa 'congelare'. Mi consente anche di aggiornare una barra di avanzamento.

Ho bisogno di aiuto per gestire questo processo. Il problema principale è quando scarico dati di entità. Devo trovare un modo per attendere che il thread finisca prima di tentare di ottenere l'entità e passare al passaggio successivo nel flusso di app.

Finora ho utilizzato una finestra di dialogo modale per controllare il flusso. Comincio il thread, faccio apparire una modale e poi getta la modale quando il thread è finito. Il modale/thread sono Observer/Observable il thread fa un set modificato quando è finito e la finestra di dialogo dispone. La visualizzazione di una modale interrompe efficacemente il flusso dell'applicazione in modo che possa attendere il completamento del download.

Ho anche provato a spostare tutto il flusso di lavoro su Observers. Tutte le GUI rilevanti nel processo sono osservatori. Ogni metodo di aggiornamento attende il completamento del download e quindi chiama la prossima parte della GUI che esegue il download.

Finora ho trovato questi due metodi che producono codice difficile da seguire. Mi piacerebbe 'centralizzare' questo flusso di lavoro in modo che altri sviluppatori non si tirino indietro quando cercano di seguirlo.

La mia domanda è: avete suggerimenti/esempi in cui un flusso di lavoro come questo può essere gestito in un modo che produce codice che è facile da seguire?

So che "easy" è un termine relativo e so che entrambe le mie opzioni funzionano già, ma vorrei ottenere alcune idee da altri programmatori mentre ho ancora tempo per cambiarlo.

Grazie mille.

risposta

0

Devi creare un "modello" per la tua vista, che rappresenta lo stato attuale della tua applicazione. Per un albero, ad es. è ragionevole mostrare un nodo "Loading" quando qualcuno apre un treenode, perché altrimenti la GUI si blocca all'apertura di un nodo.

Se il thread di caricamento termina il caricamento del nodo, il nodo "Caricamento" viene sostituito con i risultati dell'azione asincrona.Ciò semplifica l'apertura di più nodi in parallelo, poiché tutti i thread di lavoro sono responsabili per un singolo nodo figlio.

Simile durante il download di qualcosa: i lavoratori aggiornano quindi un avanzamento del download. Il download-Dialog di Firefox viene in mente qui.

Le buone GUI non sono facili :).