|
| Opdatering af GUI i en eventhandler Fra : Karl Peder Olesen |
Dato : 29-04-02 23:16 |
|
Hej
Jeg sidder med et problem (eller "opgave" hvis man ikke er til
"problemer": Jeg har et JTree, som viser informationer fra en
database. For ikke at loade alt på en gang (pga. tidsforbrug), så
gøres det fra en eventhandler, der kaldes umiddelbart før en node i
træet "foldes ud".
I eventhandleren vil jeg gerne opdatere en JLabel, som indeholder en
statusmeddelelse (i stil med "Please wait...").
Problemet er så at denne label først bliver repaint'et, når den
eventhandler, der læser fra databasen, er afslutttet. Og så er det
ligesom for sent. Alt hvad jeg kan læse mig til (Java Tutorial og Java
API) tyder på at det er standard opførsel (noget med at repaints sker
på event "tråden", som jo allerede er "i gang") - men er der en udvej?
Lige lidt kode:
---------------------
private void TreeWillExpand(ExpansionEvent evt) throws ...
{
// Called just before a tree node is expanded:
if (<children not already read from DB>)
{
StatusLabel.setText("Updating from DB. Please Wait");
// <ERROR: The text is not updated properly
<code to read from database - takes some time>
StatusLabel.setText("OK");
}
}
Jeg håber meget at der findes en løsning; for at lade en bruger sidde
og vente uden indikation af at der sker noget synes jeg ikke er en
option.
mvh
Karl Peder Olesen
| |
Anders Jørgensen (01-05-2002)
| Kommentar Fra : Anders Jørgensen |
Dato : 01-05-02 20:10 |
|
Hej Karl
Uden at have studeret dit problem nærmere, skulle jeg mene at du "bare" kan
smide din proces, der hente data op nede fra databasen, over i en ny tråd.
.... så det kommer til at se ud noget a la:
[Event]
|
V
[start tråd til db] -> [henter fra db]
| |
V V
[skriver "Please wait"]
.... men være opmærksom på, at du let kan rende ind i nogle synkroniserings
problemer, når den er færdig med at hente fra db og du skal have lukket
"please wait"!
Med venlig hilsen
Anders Jørgensen
P.S. det er som regel en god idé at sende tunge ting om i en tråd, hvis de
er startet af en event!
"Karl Peder Olesen" <kpo@mail1dotstofanetdotdk> skrev i en meddelelse
news:3ccdc3c8.26516208@news.stofanet.dk...
> Hej
>
> Jeg sidder med et problem (eller "opgave" hvis man ikke er til
> "problemer": Jeg har et JTree, som viser informationer fra en
> database. For ikke at loade alt på en gang (pga. tidsforbrug), så
> gøres det fra en eventhandler, der kaldes umiddelbart før en node i
> træet "foldes ud".
>
> I eventhandleren vil jeg gerne opdatere en JLabel, som indeholder en
> statusmeddelelse (i stil med "Please wait...").
>
> Problemet er så at denne label først bliver repaint'et, når den
> eventhandler, der læser fra databasen, er afslutttet. Og så er det
> ligesom for sent. Alt hvad jeg kan læse mig til (Java Tutorial og Java
> API) tyder på at det er standard opførsel (noget med at repaints sker
> på event "tråden", som jo allerede er "i gang") - men er der en udvej?
>
> Lige lidt kode:
> ---------------------
> private void TreeWillExpand(ExpansionEvent evt) throws ...
> {
> // Called just before a tree node is expanded:
> if (<children not already read from DB>)
> {
> StatusLabel.setText("Updating from DB. Please Wait");
> // <ERROR: The text is not updated properly
> <code to read from database - takes some time>
> StatusLabel.setText("OK");
> }
> }
>
> Jeg håber meget at der findes en løsning; for at lade en bruger sidde
> og vente uden indikation af at der sker noget synes jeg ikke er en
> option.
>
> mvh
> Karl Peder Olesen
>
| |
|
|