Hi,
Ich habe folgendes Konstrukt.
Es gibt eine Klasse, nennen wir sie Daten, welche Daten aus dem Internet läd was ja bekanntlich schonmal länger dauern kann. Diese Klasse wird von vielen verschiedenen Stellen meiner App aufgerufen. Die Aufrufende Methode möchte eigentlich nur folgendes machen
So nun muss ja in der load() Methode des Klasse Daten aber irgendwie ein Langzeit-Requester mit Abbruch Button geöffnet werden.
Das ist ja auch kein Problem. Ich erzeuge im einfachsten Fall ein Panel mit einem ProgressIndicator und einem AbbruchButton und lasse die Klasse Daten über eine Methode dialogDidCancel() davon erfahren wenn der CancelButton gedrückt wurde.
Dann erzeuge ich einen SwingWorker und lasse im Background die Daten laden. Soweit so gut.
Aber nachdem ich das Panel aufgemacht habe und dem Worker ein execute() geschickt habe, kommt ja meine Load() Methode erstmal wieder zur aufrufenden Methode zurück. Das will ich aber ja nicht. Ich müßte also quasi in der load() MEthode warten bis der Worker fertig ist. Mache ich das aber mit z.B.
was ich eh schon häßlich finde, dann ist aber natürlich auch der Thread blocked und der Dialog wird nicht gezeichnet.
Erkennt ihr mein Dilemma? Wie mache ich sowas richtig?
Danke
Claus
Ich habe folgendes Konstrukt.
Es gibt eine Klasse, nennen wir sie Daten, welche Daten aus dem Internet läd was ja bekanntlich schonmal länger dauern kann. Diese Klasse wird von vielen verschiedenen Stellen meiner App aufgerufen. Die Aufrufende Methode möchte eigentlich nur folgendes machen
Java:
Daten daten = new Daten();
if(daten.load()==false)
mache irgendwas
sonst mache was anderes.
So nun muss ja in der load() Methode des Klasse Daten aber irgendwie ein Langzeit-Requester mit Abbruch Button geöffnet werden.
Das ist ja auch kein Problem. Ich erzeuge im einfachsten Fall ein Panel mit einem ProgressIndicator und einem AbbruchButton und lasse die Klasse Daten über eine Methode dialogDidCancel() davon erfahren wenn der CancelButton gedrückt wurde.
Dann erzeuge ich einen SwingWorker und lasse im Background die Daten laden. Soweit so gut.
Aber nachdem ich das Panel aufgemacht habe und dem Worker ein execute() geschickt habe, kommt ja meine Load() Methode erstmal wieder zur aufrufenden Methode zurück. Das will ich aber ja nicht. Ich müßte also quasi in der load() MEthode warten bis der Worker fertig ist. Mache ich das aber mit z.B.
Java:
while(!worker.isDone())
Thread.sleep(250)
was ich eh schon häßlich finde, dann ist aber natürlich auch der Thread blocked und der Dialog wird nicht gezeichnet.
Erkennt ihr mein Dilemma? Wie mache ich sowas richtig?
Danke
Claus