Zum Inhalt springen

Threads / "Bitte Warten" - Popup


ETnachHause

Empfohlene Beiträge

Hallo,

ich bin´s mal wieder. :)

Ich habe eine GUI gebaut. Das Problem ist, wenn ich einen bestimmten Menüeintrag wähle, dauert der unheimlich lange(u.U. mehrere Minuten). Jetzt sieht es während dieser Zeit so aus, als wenn das Programm abgestürzt wäre (Menü bleibt ausgeklappt, ich kann nichts mehr anwählen). Jetzt möchte ich während dieser Zeit ein Popup haben mit einem "Bitte warten" oder ähnlichem. Ein Progressbar kommt nicht in Frage, da die Zeit nicht vorhersehbar ist. Ausserdem sollte das Popup automatisch wieder verschwinden, wenn die lange Methode ausgeführt ist. :)

Das ich das mit Threads machen muss, weiss ich, aber was nehme ich als Popup? Und wie sorge ich dafür, dass es wieder verschwindet?

Liebe Grüsse,

ET

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aaaalso:

Ich nehm für sowas meistens einen JDialog mit einer Progress-Bar (Indeterminate-Modus)


JProgressBar progress = new JProgressBar();
progress.setIndeterminate(true);
[/PHP]

Den Dialog starte ich in einem eigenen Thread vor der langen Operation.

Anschließend starte ich den Thread. Dazu nehme ich die Foxtrot-Library. Allderweil die auch synchrone Threads unterstützt (sonst wird der Code unübersichtlich). Gibts unter http://foxtrot.sourceforge.net. Lohnt einen Blick.

Nachdem der Thread fertig ist (mit foxtrot ein Kinderspiel) mache ich einfach ein dispose auf den Dialog.

Timo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by ETnachHause

Hallo,

ich bin´s mal wieder. :)

Ich habe eine GUI gebaut. Das Problem ist, wenn ich einen bestimmten Menüeintrag wähle, dauert der unheimlich lange(u.U. mehrere Minuten). Jetzt sieht es während dieser Zeit so aus, als wenn das Programm abgestürzt wäre (Menü bleibt ausgeklappt, ich kann nichts mehr anwählen).

Liebe Grüsse,

ET

Also ich wuerde mal vorschlagen, dass du mal nachforschst warum das denn so lange dauert ? Gibt es einen zwingenden Grund warum das so lange wartet oder haste einfach Mist programmiert ?

Ich denke man sollte ein Problem von der Wurzel her lösen und nicht irgendwelches Zeug herumprogrammieren und das ursprüngliche Problem bestehen lassen.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

sobald du mit einer Datenbank als Backend System arbeitest, in der auch einiges an Daten drin sind, dann brauchen einige Operationen einiges an Zeit. Bei mir gibt es z.B. Operationen, die brauch ca. 2-3 Minuten. Da fleißen dann aber auch gehörig Daten übers Netz...

Daher sind solche Dinge schon ab und an notwendig ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Habi

Hi,

sobald du mit einer Datenbank als Backend System arbeitest, in der auch einiges an Daten drin sind, dann brauchen einige Operationen einiges an Zeit. Bei mir gibt es z.B. Operationen, die brauch ca. 2-3 Minuten. Da fleißen dann aber auch gehörig Daten übers Netz...

Daher sind solche Dinge schon ab und an notwendig ;-)

Dann sollte das aber nicht so sein, dass wenn ich auf einen Menüeintrag klicke das passiert , da kann ich ja auch mal aus versehen draufdrücken und das ärgert dann

gewaltig.

Wenn im ResultSet soviele Eintraege sind, dann würde ich nur soviele Einträge holen wie ich momentan auch darstellen kann um den User nicht übermäßig zu nerven.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mag ja bei kleinen Anwendungen möglich sein. Allerdings wirst du bei komplexeren Dingen diese Möglichkeit einfach nicht haben. Bei mir erstrecken sich die Daten, die eich z.B. beim laden eines Projektes unmittelbar benötige über 16 Tabellen.

Eine Operation (z.B. eine neue Sprache zu einem Projekt hinzuzufügen) heißt eben:

1.) Eine neue Datenbank auf dem Server zu erzeugen.

2.) Eine große Menge an Daten in diese neue Datenbank zu bringen

Da kannst du nix häppchenweise machen. Und auch das geht bei uns auf Knopfdruck. Du gibst halt nen Namen einer neuen Sprache an und die Datenbank wird angelegt (dauert aber halt auch mal mehrere Minuten) und solange sollte die GUI nicht aussehen wie "Sau".

Es gibt aber nicht etliche Andere Szenarien, wo du solche Progress Dialoge einsetzen musst. War ja nur ein Beispiel von mir.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Habi:

Danke für den Tip, aber wir nutzen hier noch die Version 1.3 von Java und die setIndeterminate() Methode ist erst ab 1.4 verfügbar. :)

@SgtBadAzz:

Natürlich würde ich erstmal dem Grund für die lange Laufzeit auf den Grund gehen, aber da es ein externer Vorgang ist, auf den ich absolut keinen Einfluss habe, muss ich das mal so hinnehmen. ;)

Also, wenn noch jemand Anregungen hat, her damit! :)

Grüsse,

ET

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Habi

Mag ja bei kleinen Anwendungen möglich sein. Allerdings wirst du bei komplexeren Dingen diese Möglichkeit einfach nicht haben. Bei mir erstrecken sich die Daten, die eich z.B. beim laden eines Projektes unmittelbar benötige über 16 Tabellen.

Eine Operation (z.B. eine neue Sprache zu einem Projekt hinzuzufügen) heißt eben:

1.) Eine neue Datenbank auf dem Server zu erzeugen.

2.) Eine große Menge an Daten in diese neue Datenbank zu bringen

Da kannst du nix häppchenweise machen. Und auch das geht bei uns auf Knopfdruck. Du gibst halt nen Namen einer neuen Sprache an und die Datenbank wird angelegt (dauert aber halt auch mal mehrere Minuten) und solange sollte die GUI nicht aussehen wie "Sau".

Es gibt aber nicht etliche Andere Szenarien, wo du solche Progress Dialoge einsetzen musst. War ja nur ein Beispiel von mir.

Sowas ist meist immer möglich wenn mal drüber nachdenkt, es sollte aber nicht so eine kostspielige Operation ausgelöst werden nur wenn man mal aus versehen auf einen Menüentrag klickt. Des weiteren denke ich das dein Szenario sich von dem

der ursprünglich diesen Thread aufgemacht hat verschieden ist.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by ETnachHause

[b@SgtBadAzz:

Natürlich würde ich erstmal dem Grund für die lange Laufzeit auf den Grund gehen, aber da es ein externer Vorgang ist, auf den ich absolut keinen Einfluss habe, muss ich das mal so hinnehmen. ;)

Also, wenn noch jemand Anregungen hat, her damit! :)

Grüsse,

ET

Was ist ein externer Vorgang, was wird denn gemacht wenn man auf den Menüeintrag klickt ?

Ich würde das erstmal genau untersuchen bevor ich an irgendwelche Workarounds denke würde.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by ETnachHause

Das genau zu erklären, würde hier den Rahmen sprengen, aber es existiert schon und gehört nicht mit zu meinem Projekt und ich kann rein gar nix daran machen.

Ich muss es halt nur anstossen. Vielleicht wird es irgendwann noch mal überarbeitet, aber vorerst net von mir.

Na ja, zweimal Falsch machen noch kein Richtig, aber was solls.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...