Wygląda na to, że zapytania bazy danych są uruchamiane z wątku interfejsu użytkownika, nawet jeśli mówisz, że zaplanowane zadanie uruchamia zapytania (?). Aby mieć pewność, możesz wydrukować stos, w którym uzyskujesz dostęp do bazy danych:
new Exception().printStacktrace();
Przechodząc do proponowanego rozwiązania:wydaje się, że jest to przyzwoity projekt, jeśli twoje zapytania bazy danych są powolne i w przeciwnym razie zamroziłyby twój interfejs użytkownika. Możesz zaimplementować system zdarzeń między warstwą interfejsu użytkownika a warstwą db, być może proste podejście oparte na kolejce.
EDYTUJ:
Są najprawdopodobniej przykłady, jak zaimplementować rozwiązanie oparte na zdarzeniach.
Zastrzeżenie:od wielu lat nie robiłem żadnego prawdziwego programowania interfejsu użytkownika.
- Użytkownik klika przycisk w interfejsie użytkownika. Wątek interfejsu użytkownika umieszcza obiekt zdarzenia (DataWantedEvent) w kolejce (java.util.Queue), zmienia etykietę ("Oczekiwanie na dane..."), a następnie kontynuuje i czeka na inne interakcje użytkownika.
- Wątek warstwy db pobiera zdarzenie z kolejki i wysyła zapytanie do bazy danych. Wynik jest wysyłany z powrotem do innej kolejki w obiekcie wynikowym.
- Wątek interfejsu użytkownika (prawdopodobnie nie główny wątek) pobiera obiekt wynikowy z kolejki wyników i aktualizuje interfejs użytkownika.
Kolejka do wysyłania obiektów wynikowych z powrotem do interfejsu użytkownika może nie być potrzebna. Metodę aktualizacji można wywołać bezpośrednio.
Jeśli użytkownik kliknie przycisk anulowania, zdarzenie aktualizacji/wywołanie zwrotne może zostać zignorowane lub, jeśli to możliwe, zapytanie bazy danych może zostać anulowane.