Swing ha una filettatura che è responsabile per consentire all'utente di interagire con la parte grafica dell'applicazione. Se esegui solo attività rapide in risposta a eventi avviati dall'utente, la tua applicazione sarà sempre reattiva.
Potrebbe verificarsi un problema se si esegue un'attività a esecuzione prolungata, da un evento avviato dall'utente, senza utilizzare un thread separato per eseguire tale attività - il problema è che, mentre l'attività è in esecuzione, l'applicazione si bloccherà. Non si verificheranno ripetizioni, l'utente non sarà in grado di interagire con tutto ciò, sembrerà che l'applicazione si sia chiusa a chiave.
Se si esegue un compito in un thread separato (per esempio, si sta scaricando una pagina e si desidera informare l'utente che il download è stato completato), allora non possono aggiornare swing direttamente da tale compito, invece devi utilizzare uno dei metodi di supporto che hai menzionato nella tua domanda.
È un processo più laborioso per creare queste attività in modo che l'applicazione sia sempre reattiva, ma se si esegue qualcosa che richiede molto tempo (il download di un file è un buon esempio), l'applicazione continuerà a essere reattivi anche mentre l'attività viene eseguita, e si può anche consentire all'utente di annullare l'attività, purché l'attività stessa lo consenta. È possibile utilizzare una finestra di dialogo modale per impedire all'utente di eseguire qualsiasi altra operazione mentre viene eseguita l'attività (se si desidera farlo) o di avere una finestra di dialogo di avanzamento che visualizza una rotellina o qualcosa del genere. Ma immagino che la cosa importante non sia lasciare che l'utente pensi che l'applicazione sia semplicemente "congelata" senza motivo.
fonte
2012-11-22 20:55:32
Mi piacerebbe sapere perché sottovalutare questa domanda ... che cosa non va? – gotch4
Avere un upvote. Penso che la tua domanda vada bene. –
Forse potresti collegare un riferimento a dove l'hai sentito? – Axel