Operacje długotrwałe

Pakiet org.eclipse.jface.operations definiuje interfejsy dla długotrwałych operacji wymagających wskaźników postępu lub pozwalających użytkownikowi na anulowanie operacji.Takich interfejsów używa się przy implementacji okien dialogowych postępu i widoków w środowisku roboczym.

Moduły dodatkowe powinny używać obsługi środowiska roboczego zawartej w interfejsie IProgressService do uruchamiania długotrwałych operacji, aby wszystkie moduły dodatkowe miały spójną prezentację postępu. Aby zapoznać się z pełnym opisem dostępnej obsługi okien dialogowych i widoków postępu, patrz rozdział Obsługa współbieżności w środowisku roboczym. Pozostała część tej sekcji poświęcona została szczegółom infrastruktury operacji JFace używanej przez środowisko robocze.

Uruchamianie i postęp

Środowisko wykonawcze platformy definiuje wspólny interfejs - IProgressMonitor - używany do raportowania użytkownikowi postępu w trakcie wykonywania długotrwałych operacji. Gdy istotne jest wyświetlanie informacji o postępie, klient może udostępnić monitor jako parametr wielu metod interfejsu API platformy.

Pakiet JFace definiuje konkretne interfejsy dla obiektów, które implementują interfejs użytkownika monitora postępu. 

IRunnableWithProgress jest interfejsem dla długotrwałych operacji. Metoda run tego interfejsu ma parametr IProgressMonitor, który jest używany do raportowania postępu i sprawdzania, czy operacja została anulowana przez użytkownika.

IRunnableContext jest interfejsem służącym do raportowania postępu w różnych miejscach interfejsu użytkownika. Klasy implementujące ten interfejs mogą wybrać różne techniki wyświetlania postępu i wykonywania tej operacji. Na przykład klasa ProgressMonitorDialog implementuje ten interfejs, wyświetlając okno dialogowe postępu. Interfejs IWorkbenchWindow implementuje ten interfejs, wyświetlając informacje o postępie w wierszu statusu okna środowiska roboczego. Natomiast klasa WizardDialog implementuje ten interfejs, aby wyświetlić informacje o długotrwałych operacjach w wierszu statusu kreatora.

Uwaga:  Interfejs użytkownika środowiska roboczego udostępnia dodatkową obsługę dla operacji klasy WorkspaceModifyOperation. Ta klasa upraszcza implementację długotrwałych operacji, które zmieniają obszar roboczy. Odwzorowuje ona interfejs IRunnableWithProgress na interfejs IWorkspaceRunnable.  Szczegółowe informacje na ten temat można znaleźć w dokumentacji Javadoc.

Operacje modalne

Do uruchamiania operacji, które z perspektywy kodu klienta są modalne, udostępniana jest klasa ModalContext. Ta klasa jest używana w różnych implementacjach interfejsu IRunnableContext. Jeśli przed kontynuowaniem wykonywania moduł dodatkowy musi czekać na zakończenie długotrwałej operacji, klasa ModalContext realizuje to zadanie przy zachowaniu możliwości współpracy z interfejsem użytkownika.

Jeśli operacja jest wykonywana w kontekście modalnym, można ją rozwidlić w innym wątku. Jeśli wartość parametru fork wynosi false, to operacja będzie wykonywana w wątku wywołującym. Jeśli wartość parametru fork to true, operacja będzie wykonywana w nowym wątku, wątek wywołujący zostanie zablokowany, a pętla zdarzeń interfejsu użytkownika będzie wykonywana aż do chwili zakończenia operacji.  

Więcej informacji na temat pętli zdarzeń interfejsu użytkownika zawiera sekcja Problemy z wątkami dotyczące klientów.