Det verkar som om dina db-frågor körs från UI-tråden även om du säger att en schemalagd uppgift kör frågorna (?). För att vara säker kan du skriva ut en stacktrace där du kommer åt databasen:
new Exception().printStacktrace();
Över till din föreslagna lösning:det verkar som en anständig design om dina db-frågor är långsamma och annars skulle frysa ditt användargränssnitt. Du kan implementera ett händelsesystem mellan ditt gränssnittslager och db-lagret, kanske ett enkelt köbaserat tillvägagångssätt.
EDIT:
Det finns med största sannolikhet exempel på hur man implementerar en händelsebaserad lösning.
Ansvarsfriskrivning:Jag har inte gjort någon riktig UI-programmering på många år.
- Användaren klickar på en knapp i användargränssnittet. Gränssnittstråden placerar ett händelseobjekt (DataWantedEvent) i en kö (java.util.Queue), ändrar en etikett ("Waiting for data...") och fortsätter sedan och väntar på andra användarinteraktioner.
- db-lagertråden tar händelsen från kön och frågar databasen. Resultatet postas tillbaka i en annan kö i ett resultatobjekt.
- En gränssnittstråd (förmodligen inte huvudtråden) tar resultatobjektet från resultatkön och uppdaterar gränssnittet.
En kö för att skicka resultatobjekt tillbaka till användargränssnittet kanske inte behövs. En uppdateringsmetod kan anropas direkt.
Om användaren klickar på en avbryt-knapp kan uppdateringshändelsen/återuppringningen ignoreras eller, om möjligt, kan db-frågan avbrytas.