Sepertinya kueri db Anda dijalankan dari utas UI meskipun Anda mengatakan bahwa tugas terjadwal menjalankan kueri (?). Yang pasti, Anda dapat mencetak stacktrace tempat Anda mengakses database:
new Exception().printStacktrace();
Ke solusi yang Anda usulkan:sepertinya desain yang layak jika kueri db Anda lambat dan sebaliknya akan membekukan UI Anda. Anda dapat menerapkan sistem peristiwa antara lapisan UI dan lapisan db, mungkin dengan pendekatan berbasis antrian sederhana.
EDIT:
Ada kemungkinan besar contoh untuk menemukan cara menerapkan solusi berbasis peristiwa.
Penafian:Saya belum pernah melakukan pemrograman UI nyata selama bertahun-tahun.
- Pengguna mengklik tombol di UI. Utas UI menempatkan objek peristiwa (DataWantedEvent) pada antrean (java.util.Queue), mengubah label ("Menunggu data..."), lalu melanjutkan dan menunggu interaksi pengguna lain.
- Utas lapisan db mengambil kejadian dari antrian dan menanyakan database. Hasilnya diposting kembali pada antrian lain di objek hasil.
- Utas UI (mungkin bukan utas utama) mengambil objek hasil dari antrean hasil dan memperbarui UI.
Antrian untuk memposting objek hasil kembali ke UI mungkin tidak diperlukan. Metode pembaruan dapat dipanggil secara langsung.
Jika pengguna mengklik tombol batal, acara pembaruan/panggilan balik dapat diabaikan atau, jika memungkinkan, kueri db dapat dibatalkan.