Te dwie metody w SwingWorker dezorientują mnie w tej chwili i wydaje się, że bardzo łatwo można z nich korzystać nieprawidłowo.W jaki sposób poprawnie stosuje się metody publish() i process() w SwingWorker?
Sposób publish() opisuje:
kawałki wysyła dane do sposobu procesu (java.util.List). Ta metoda ma być używana od wewnątrz metody doInBackground do dostarczania wyników pośrednich do przetwarzania na wątku wywołania zdarzenia wewnątrz metody procesu.
Co to oznacza dla mnie jest to, że podczas gdy mój wątek pracownik wykonuje swoją metodę doInBackground(), jestem w stanie stworzyć „kawałki” (powinno to być coś specyficznego, czy jest to tylko sposób odnosić się do obiektów wiadomość?) , następnie opublikuj je do przetworzenia w moim GUI Swing.
To prowadzi mnie do process(). Jawadok opisuje:
Odbiera porcje danych z metody publikowania asynchronicznie w wątku wywołania zdarzenia.
Po przejrzeniu dokumentacji dla obu metod, czy ktoś mógłby wyjaśnić, jaki mechanizm stoi za tym, jak to się dzieje? Rozumiem, że jest to proces asynchroniczny, jak w dokumentacji, ale ponieważ odbywa się on na EDT, wyobrażam sobie, że istnieje pewna przewidywalność.
W publish()
dokumentacja stwierdza tak:
Ponieważ proces metoda jest wywoływana asynchronicznie na wątków zdarzenia Wysłanie wielu wywołań metody publikowania może nastąpić przed metoda proces jest wykonywany. Dla celów wydajności wszystkie te wywołania są połączone w jedno wywołanie z połączonymi argumentami.
Podsumowując, moje pytanie jest dwojakie:
- Kto powinien być wywołanie
process()
? - Co to jest workflow dla
process()
w kontekście SwingWorker i EDT?
Proszę dać mi znać, jeśli potrzebujesz wyjaśnienia.
'process()' jest wywołaniem zwrotnym. Nie musisz tego wywoływać. Funkcja 'process()' jest wywoływana w EDT przez bibliotekę. – johnchen902