Come la maggior parte dei programmatori Java sanno, gli aggiornamenti a Swing GUI dovrebbe essere fatto solo sul thread evento AWT dispacciamento e la raccomandazione è che i processi di lunga esecuzione essere eseguite su un thread "lavoratore", con gli aggiornamenti inviati al thread di invio dell'evento utilizzando SwingUtilities.invokeAndWait()
o SwingUtilities.invokeLater()
.modello per bloccare utente Java Swing nel thread di lavoro
Come si fa a fermare l'utente di procedere con l'applicazione, mentre il processo di lunga durata è completato? Disattivate i controlli e quindi riattivate il thread di lavoro utilizzando le chiamate SwingUtilities
di cui sopra?
C'è una migliore modello alternativo?
Perché avete necessità di vietare all'utente di utilizzare l'applicazione?Se possibile, vuoi evitare di farlo e permetti loro di andare avanti. Se è assolutamente necessario, tuttavia, che dire di una finestra di dialogo modale? Puoi anche disabilitare i controlli. – justkt
Buona domanda. Non conosco nessuna risposta standard tranne il ProgressMonitor. – keuleJ
@justkt: se il processo di lunga durata influisce sulla cosa che viene mostrata, potrei non volere che l'utente faccia qualcos'altro, tranne forse annullare l'operazione. Quello che faccio di solito è una finestra di dialogo modale con i pulsanti, ecc. Disabilitata tranne che per il pulsante "Annulla", ma spero in un modello più generale. – Ralph