JWindow.setVisible(true) dauert ewig

MrRock

Mitglied
Moin,

also folgendes Problem:

Ich habe eine Anwendung(JWindow), die ,wenn man auf einen Button drückt, ein JDialog öffnet. Dieser JDialog hat rel viele JTabbedPanes mit vielen Componenten. Dann wird eine Konfigurationsdatei eingelesen und alle Componenten mit den Daten gefüllt. Die meisten Componenten sind globale Variablen

Bis der JDialog erscheint können schon mal 5 Sekunden vergehen. Das ist nicht akzeptabel!

Ich könnte den JDialog befüllen, während das Programm läuft und dann nur noch sichtbar machen. Will ich aber nicht unbedingt! Ich will verstehen warum das so lange dauert und was ich benutzen sollte um dies zu beschleunigen!?

Ich habe nun vorerst ein JWindow gemacht, das den Ladestatus anzeigen soll. Aber das wird garnicht erst sichtbar gemacht(das Fenster ansich schon, aber nicht die Komponenten, das JLabel etc..), bzw. erst wenn alles (JDialog) angezeigt wird.
Irgendwie wird die Anzeige der Komponenten(Lade-JWindow) geblockt bis alle Komponenten des JDialog initialisiert wurden.

Habe ich JAVA noch nicht verstanden? ich dachte die Methoden werden abgearbeitet kehren zurück und es geht mit der nächsten weiter.


Wäre für jden Tip dankbar!!

Gruß MrRock

Crosstheading: http://www.java-forum.org/de/topic57056_jwindow-setvisible-true-dauert-ewig.html
 
Naja aber die Abarbeitung von Methoden kann sehr unterschiedlich lang dauernd und mit Oberflächenkomponenten verhält es sich sowieso etwas anders da die in einem Thread dargestellt werden und es wirklich nur einen einzigen Thread für die Oberflächendarstellung gibt. Wenn du also zwei Oberflächenkomponenten gleichzeitig darstellen willst musst du dafür spezielle Mechanismen benutzen damit dies funktioniert.

Wie auch immer... wenn deine Darstellung so lange dauert solltest du mal suchen woran genau das liegt. Dauert vllt das Laden der Daten von dir sehr lange?

Das kannst du sehr leicht prüfen in dem du vor dem Aufruf dir mit System.currentTimeMillis die Zeit merkst und nach der Methode dies nocheinmal durchführst und diese Werte voneinander abziehst um die Ausführungszeit in Millisekunden zu erhalten.

Ansonsten kannst du auch einen Profiler benutzen, der sagt dir auch genau wie lange welche Methode benötigt.
 
Danke für die Antwort!

Das Laden ist es nicht, es ist wirklich das Erstellen des JDialogs. Das hab ich schon getestet. Da es viele Tabs mit den gleichen (auch vielen) Komponenten gibt, werde ich dies in eine Art work-Methode auslagern, um nicht immer wieder Instanzvariablen zu erzeugen.

PS: danke für die Erklärung mit dem Oberflächen-Thread


Hat jmd einen Link zu einem guten Tutorial oder Dokumentation zum Thema Performanceoptimierung?
 
Moin,
war eine Weile weg, sorry.

Falls noch jmd helfen möchte: Sourcecode

der Sourcecode ist jetzt so, dass der JDialog erstellt wird während das Hauptprogramm lädt. Das blockiert im Moment die GUI des Hauptprogramms bis alles geladen ist, dann wird wenn benötigt der Dialog nurnoch sichtbar gemacht.
Ist aber auch keine zufriedenstellende Lösung.:mad:
 
Zuletzt bearbeitet:
Zurück