Questi due metodi in mi stanno confondendo al momento e sembra che sia molto facile utilizzarli in modo errato.Come vengono utilizzati correttamente i metodi publish() e process() su SwingWorker?
Il metodo publish() descrive quanto segue:
invia blocchi di dati al metodo processo (java.util.List). Questo metodo deve essere utilizzato all'interno del metodo doInBackground per fornire risultati intermedi per l'elaborazione nel thread di invio eventi all'interno del metodo di processo.
Che cosa questo significa per me è che mentre il mio thread di lavoro sta eseguendo il suo metodo doInBackground(), sono in grado di creare "pezzi" (dovrebbe questi essere qualcosa di specifico o è solo un modo per fare riferimento a oggetti inclusi nei messaggi?) , quindi pubblicali per l'elaborazione sulla mia GUI Swing.
Questo mi porta a process(). Javadoc delinea quanto segue:
Riceve i blocchi di dati dal metodo di pubblicazione in modo asincrono sul thread di invio eventi.
Dopo aver esaminato la documentazione per entrambi i metodi, qualcuno potrebbe chiarire qual è il meccanismo dietro a come questo sta avvenendo? Capisco che si tratta di un processo asincrono come da documentazione, ma dal momento che sta avvenendo sull'EDT, sto immaginando che ci sia una certa prevedibilità ad esso.
I publish()
stati di documentazione questo:
Poiché il metodo di processo viene richiamato in modo asincrono sull'evento spedizione discussione più invocazioni al metodo di pubblicazione potrebbe verificarsi prima dell'esecuzione del metodo di processo. A fini di prestazioni, tutte queste invocazioni sono raggruppate in un'unica invocazione con argomenti concatenati.
Per riassumere, la mia domanda è duplice:
- Chi dovrebbe essere chiamata
process()
? - Qual è il flusso di lavoro per
process()
nel contesto di SwingWorker e EDT?
Per favore fatemi sapere se sono necessari chiarimenti.
'process()' è un callback. Non è necessario chiamarlo. 'process()' è chiamato in EDT dalla libreria. – johnchen902