# WaitScreen bei zeitaufwändigen RMI Calls



## drunk (11. Mai 2009)

Hallo Zusammen,

ich schreibe gerade an einer Anwendung, die ziemlich viele Daten speichert.
Soweit funktioniert alles problemlos, allerdings habe ich folgendes Problem:

Da sehr große Datenmengen gespeichert werden, und teilweise noch RMI Record Stores angelegt werden, dauert es auf meinem Simulator ca. 5 Sekunden, bis der Speichervorgang beendet ist, und die Form gezeigt wird, die ich mit display.setCurrent(form) zu setzen versuche.

Damit der Nutzer nicht denkt, das Prog. sei abgestürzt, möchte ich gerne einen Wartescreen einschieben. Dies gelingt mir allerdings nicht, da das Display scheinbar erst wieder freigegeben wird, wenn die RMI Aufrufe durch sind.

Folgendes habe ich schon versucht:

- Form mit Wartemeldung erzeugen, und mittels display.setCurrent(form) setzen
- Speicheraufgaben aufrufen
- Form mit Erfolgsmeldung erzeugen und mittels display.setCurrent setzen
-------
Erfolglos-> Der Wartescreen wird komplett übergangen und erst nach 5 Sek. der "OK" Screen gezeigt


- Form mit Wartemeldung erzeugen, und mittels display.setCurrent(form) setzen
- Mittels Endlosschleife warten, bis waitscreen.isShown == true
- Speicheraufgaben aufrufen
- Form mit Erfolgsmeldung erzeugen und mittels display.setCurrent setzen
-------
Erfolglos-> Bleibt ewig in der Endlosschleife hängen


- Waitscreen und Speicheraufgaben in jeweils einen Thread gepackt und beide laufen lassen
-------
Erfolglos-> Zeigt wieder erst nach 5 Sekunden den OK Screen


- Alert erzeugen, der nach 5 Sekunden die OK Form zeigen soll
-------
Erfolglos-> Zeigt wieder erst nach 5 Sekunden den OK Screen


Langsm bin ich also am Verzweifeln. Es scheint, als will er mir den Screen einfach nicht geben, solange noch weitere Befehle in der weiteren Verarbeitung offen sind...

Bin über jeden Tip dankbar !


----------



## Marco13 (11. Mai 2009)

Ist jetzt schwer, das im einzelnen nachzuvollziehen, aber ... du solltest schauen, dass das eigentlich Zeitaufwändige nicht im Event-Dispatch-Threda (sondern in einem eigenen Thread) gemacht wird, und der Dialog mit sowas wie

```
SwingUtilites.invokeLater(new Runnable()
{
    public void run()
    {
        dingens.setVisible(true);
    }
});
```
ein- und ausgeblendet wird....


----------



## drunk (11. Mai 2009)

Du weisst aber, dass ich von Java ME, und nicht von Swing spreche ?

Evtl. gibt es Probleme, da ich einen "Wizard" mit 10 Schritten folgendermassen gelöst habe:

Hauptprogramm-> bei Klick auf Command.OK erzeuge ich ein neues Objekt vom Typ Schritt 2 und übergebe diesem das aktuelle Display Objekt.

Die Klasse "Schritt 2" nimmt das übergebene Display und setzt eine selbst erzeugte Form drauf.
Wenn OK gedrückt wird, wird von "Schritt 2" aus ein Objekt "Schritt 3" erzeugt, das sich wieder das Display nimmt etc.

Kann ich in dieser Hirarchie dann überhaupt Threads ausführen die setCurrent anwenden ?
Oder kann es sein (meine Vermutung), dass setCurrent erst ausgeführt wird, wenn sich der Programmfluss wieder im Hauptmenu befindet (und alle "Schritt" Objekte also fertig erzeugt sind) ?


----------



## Marco13 (11. Mai 2009)

Hoppala nee sorry - da hatte ich nicht auf den Forenbereich geschaut


----------

