ETnachHause Geschrieben 4. März 2003 Teilen Geschrieben 4. März 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Habi Geschrieben 4. März 2003 Teilen Geschrieben 4. März 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SgtBadAzz Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Habi Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 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 ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SgtBadAzz Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Habi Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ETnachHause Geschrieben 5. März 2003 Autor Teilen Geschrieben 5. März 2003 @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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Habi Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 @ETnachHause: Muss ja keine Progress Bar sein. Im Dialog kann ja auch nur ne Textmessage drinn stehen ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SgtBadAzz Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SgtBadAzz Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ETnachHause Geschrieben 5. März 2003 Autor Teilen Geschrieben 5. März 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SgtBadAzz Geschrieben 5. März 2003 Teilen Geschrieben 5. März 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.