Hi,
ich komme aus der OSX Ecke und wenn ich dort etwas mache, dass im Hintergrund ausgeführt werden muss weil es zu lange dauert, dieses aber gleichzeitig das UI verändern muss, dann geht das ungefähr so:
Das ist alles.
Jetzt versuche ich gerade sowas profanes mit Swing hinzubekommen. Ich dachte ok, wird nicht so schwer sein. Aber Pustekuchen. Ich habe es erst mit einem einfach runnable mit einem Thread versucht und dann nach dem Thread.start() direkt einen Thread.join(), damit der Maintask schonmal darauf wartet das der Hintergrund Thread fertig wird. Dummerweise scheint er den Thread start aber wohl zu machen bevor das setVisible() von meinem ProgressPanel komplett ausgeführt wurde. Jedenfalls erscheint da ein leeres Frame auf dem Bildschirm. Ok, dann versuche ich es halt mit dem SwingUtilities und InvokeLater. Nun habe ich mein ProgressFrame aber dafür rennt mein Mainthread direkt durch und schließt das ProgressFrame direkt wieder....
Das kann doch nicht so kompliziert sein so etwas zu machen. Alle Tutorials dazu sind erschreckend unverständlich für mich. Wahrscheinlich weil ich einfach ganz anders denke oder finde ich einfach nicht das richtige?
Gruß
Claus
ich komme aus der OSX Ecke und wenn ich dort etwas mache, dass im Hintergrund ausgeführt werden muss weil es zu lange dauert, dieses aber gleichzeitig das UI verändern muss, dann geht das ungefähr so:
Code:
-void methodeXYirgendeinerKlasse()
{
// Öffne ein Fenster (Meinetwegen ProgressIndikator)
[self.performSelectorInBackground:@selector(backgroundMethode:) withObject:irgendeinObject];
}
-(void)backgroundMethode:(IrgendEinObject)irgendeinObject
{
do
{
// mache halt irgendwas
[self.performSelectorInMainThread:@selector(updateMainMethode:) withObject:irgendeinObject];
}
while()
[self.performSelectorInMainThread:@selector(doneMainMethode:) withObject:irgendeinObject];
}
-(void)updateMainMaetohde:(IrgendeinObject)irgendeinObject
{
// refreshen wir das ProgressBar
}
-(void)doneMainMaetohde:(IrgendeinObject)irgendeinObject
{
// Schließen wir das Fenster und machen weiter mit unserem Programm....
}
Das ist alles.
Jetzt versuche ich gerade sowas profanes mit Swing hinzubekommen. Ich dachte ok, wird nicht so schwer sein. Aber Pustekuchen. Ich habe es erst mit einem einfach runnable mit einem Thread versucht und dann nach dem Thread.start() direkt einen Thread.join(), damit der Maintask schonmal darauf wartet das der Hintergrund Thread fertig wird. Dummerweise scheint er den Thread start aber wohl zu machen bevor das setVisible() von meinem ProgressPanel komplett ausgeführt wurde. Jedenfalls erscheint da ein leeres Frame auf dem Bildschirm. Ok, dann versuche ich es halt mit dem SwingUtilities und InvokeLater. Nun habe ich mein ProgressFrame aber dafür rennt mein Mainthread direkt durch und schließt das ProgressFrame direkt wieder....
Das kann doch nicht so kompliziert sein so etwas zu machen. Alle Tutorials dazu sind erschreckend unverständlich für mich. Wahrscheinlich weil ich einfach ganz anders denke oder finde ich einfach nicht das richtige?
Gruß
Claus