SwingWorker
viene utilizzato per i seguenti scopi:Java - Differenza tra SwingWorker e SwingUtilities.invokeLater()
- Per l'esecuzione dei compiti a lungo in esecuzione in un thread diverso in modo da impedire l'interfaccia grafica di essere insensibile
- Per l'aggiornamento della GUI con i risultati prodotti dall'attività di lunga durata alla fine dell'attività tramite il metodo
done()
. - Per l'aggiornamento della GUI di volta in volta con i risultati intermedi prodotti e pubblicati dall'attività con l'aiuto dei metodi
publish()
eprocess()
.
SwingUtilities.invokeLater()
possibile eseguire le operazioni di cui sopra come segue:
- Invece di eseguire
SwingWorker.execute()
metodo dal EDT, possiamo eseguireExecutorService.submit(new MyRunnable())
come sarà anche creare un altro filo che può eseguire un'operazione lunga durata. - Per l'aggiornamento della GUI al termine dell'attività, è possibile inserire il codice (scritto nel metodo
done()
del caso1)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
alla fine dell'attività. - Per l'aggiornamento della GUI nel mezzo dell'attività, possiamo inserire il codice (scritto nel metodo
process()
del caso1)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
nel punto in cui abbiamo chiamato il metodopublish()
in caso1.
Chiedo questa domanda, perché il problema determinata in questione Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT può essere risolto con SwingUtilities.invokeLater()
ma non può essere risolto con SwingWorker
io non sono abbastanza sicuro che cosa è la 'domanda'. – akf
@akf se non si è sicuri, quindi lasciarlo. Semplice :) –
Il problema a cui fai riferimento è risolvibile usando SwingWorker. Vedi la mia risposta lì. –