Hallo zusammen,
ich habe folgendes Problem: Im AWT-Event-Thread wird durch einen Bediener etwas ausgelöst, z.B. durch einen Klick auf einen Button. Die Applikation löst eine serverseitige Buchung aus, d.h. aus dem AWT-Event-Thread wird eine Nachricht an einen Serverprozess gesendet und der (AWT-Event-)Thread danach (mittels wait) schlafen gelegt. Wenn die serverseitige Buchung abgeschlossen ist, sendet der Serverprozess eine Nachricht an den clientseitigen Worker-Thread. Dieser weckt dann den AWT-Event-Thread (mittels notifyAll) auf.
Soweit so gut. Leider passt in dieses Konzept ein ProgressMonitor nur sehr schwer hinein. Derzeit ist es so, dass vom Serverprozess der Fortschritt während einer langen Verbuchung mittels einer Nachricht an den clientseitigen Worker-Thread gesendet wird. Dieser weckt dann den AWT-Event-Thread auf welcher dann einen ProgressMonitor anzeigt.
Nun habe ich im GUI bei der auslösenden Funktion (Knopfdruck) beispielsweise folgenden Code:
Bei der ersten Fortschrittsanzeige wird der AWT-Event-Thread aufgeweckt, doSrvTransaction kehrt zurück und die folgenden Aktionen werden viel zu früh ausgeführt.
Kann mir vielleicht jemand auf die Sprünge helfen, wie das sauber gelöst werden kann, dass doSrvTransaction tatsächlich erst nach Abschluss der serverseitigen Transaktion zurückkehrt und im GUI trotzdem ein ProgressMonitor aktualisiert wird?
Gruß,
AMiGA
ich habe folgendes Problem: Im AWT-Event-Thread wird durch einen Bediener etwas ausgelöst, z.B. durch einen Klick auf einen Button. Die Applikation löst eine serverseitige Buchung aus, d.h. aus dem AWT-Event-Thread wird eine Nachricht an einen Serverprozess gesendet und der (AWT-Event-)Thread danach (mittels wait) schlafen gelegt. Wenn die serverseitige Buchung abgeschlossen ist, sendet der Serverprozess eine Nachricht an den clientseitigen Worker-Thread. Dieser weckt dann den AWT-Event-Thread (mittels notifyAll) auf.
Soweit so gut. Leider passt in dieses Konzept ein ProgressMonitor nur sehr schwer hinein. Derzeit ist es so, dass vom Serverprozess der Fortschritt während einer langen Verbuchung mittels einer Nachricht an den clientseitigen Worker-Thread gesendet wird. Dieser weckt dann den AWT-Event-Thread auf welcher dann einen ProgressMonitor anzeigt.
Nun habe ich im GUI bei der auslösenden Funktion (Knopfdruck) beispielsweise folgenden Code:
Java:
public void doAnything()
{
doSrvTransaction();
refreshFrame();
informUserViaMsgBox();
}
Bei der ersten Fortschrittsanzeige wird der AWT-Event-Thread aufgeweckt, doSrvTransaction kehrt zurück und die folgenden Aktionen werden viel zu früh ausgeführt.
Kann mir vielleicht jemand auf die Sprünge helfen, wie das sauber gelöst werden kann, dass doSrvTransaction tatsächlich erst nach Abschluss der serverseitigen Transaktion zurückkehrt und im GUI trotzdem ein ProgressMonitor aktualisiert wird?
Gruß,
AMiGA