Verzögerung bei der ersten Anzeige

fsicher

Bekanntes Mitglied
Ich zeichne in einem JFrame mehrfach eine Komponente jeweils neu und zeige sie an. Bei der ersten Anzeige ist eine Verzögerung wahrnehmbar, während die restlichen blitzschnell funktionieren. Die Anzeige ist konsistent und korrekt.

Ich habe am Ende der Methode, die das ganze steuert, ein 'beep' eingefügt. Beim ersten Durchlauf kommt das akustische Signal früher: erst danach (ca. 1 sek.) kommt das Bild. Bei wiederholten Anzeige (es wird jedes Mal neu gezeichnet), kommt das Bild vor dem akustischen Signal.

Woran könnte dies liegen?
 

Morl99

Mitglied
Kannst du irgendwie überprüfen ob der awt thread noch reaktiv ist? Klingt nach einem hängenden Thread, was machst du denn so beim/vorm zeichnen?
 
T

Tomate_Salat

Gast
Hört sich für mich viel mehr nach "das Bild braucht ein wenig zum laden"-problem an. Danach ists in ieinem Feld gespeichert und kann schnell abgerufen werden. Aber Ohne Code und Informationen zum Bild* lässt sich das schwer beurteilen.

* Größe in MB, Abmessungen, wird es skaliert?

MFG

Tomate_Salat
 

fsicher

Bekanntes Mitglied
Etwas Code anzeigen ist nicht so einfach: es handelt sich um ca. 20 Klassen. Und Bilder sind kein Problem: wenn ich nur den Teil, in dem keine Bilder benötigt werden, ausführen lassen, ist die Verzögerung weiterhin da.

Kannst du irgendwie überprüfen ob der awt thread noch reaktiv ist? Klingt nach einem hängenden Thread, was machst du denn so beim/vorm zeichnen?

Nun, wie kann man dies prüfen?

Das Zeichnen wird direkt von einem MenuItem veranlasst, zuvor herscht Ruhe. Nach dem Zeichnen passiert nichts mehr: denn, weitere Aktionen sollen durch Menü hervorgerufen werden. Also, es ist nicht so, dass irgendetwas vor oder nach dem Zeichnen Ressourcen verbraucht. Ich habe eher den Eindruck, dass die Verarbietung von GUI-Events im Hintergrund sehr lange geht. Aber wieso nur beim ersten Mal ...

Folgendes Beispiel zeigt, wie ich es ungefähr mache:

Java:
public void refresh() {
	if (SwingUtilities.isEventDispatchThread()) {
		paintTheView();
	} else {

		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {
				paintTheView();
			}
		});
	}
}

Und, in der Methode paintTheView wird (vereinfach gesagt) so etwas wie eine Tabelle (mehrere Zeilen und mehrere Spalten) gezeichnet: kleinere Quadraten, die unterschiedliche Hintergrundfarben haben.

Danke.
 
Zuletzt bearbeitet:

fsicher

Bekanntes Mitglied
Nach einigen Versuchen konnte ich die Codezeile finden, die dazu führt, dass die erste Anzeige mit einer Verzögerung erfolgt. Es handelt sich um die Codezeile, in der einem JLabel-Objekt ein neues Font-Objekt zugewiesen wird (ich muss die Schriftgrösse wegen Platzmangel reduzieren).

Java:
Font newFont = new Font("Helvetica", Font.PLAIN, 10);

// ... 

for (int i = 0; i < n; i++){

// ... 

JLabel idLabel = new JLabel();

/* Folgende Zeile ist kritisch bzw. sehr teuer */
idLabel.setFont(newFont);	

// ...		
}

Diese Codezeile befindet sich in einer Schleife, die höchstens 6 Mal ausgeführt wird. Wenn ich diese Zeile auskommentiere, funktioniert es einwandfrei.

Ich habe Messungen mit System.nanoTime wiederholt gemacht (wohl wissend, dass die Genauigkeit nicht hoch ist) und konnte auch feststellen, dass im ersten Durchgang die Abarbeitung der kritischen Codezeile mehrfach (3 bis 6 Mal) länger dauert. Nach dem ersten Durchlauf bleibt die Zeit, die für die Abarbeitung dieser Codezeile benötigt wird, relativ konstant.

Weiss jemand, wieso diese Zuweisung so lange dauert? Und, gebe es eine bessere Lösung?

Danke für jeden Tipp.
 

madboy

Top Contributor
Code:
JComponent#setFont(Font)
führt ein Repaint aus wenn Font nicht schon vorher gesetzt war (in deinem Fall also sehr wahrscheinlich). Das könnte zu der Verzögerung führen. Für Details siehe
Code:
JComponent#setFont(Font)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
S Verzögerung zwischen Cursorbewegung einbauen AWT, Swing, JavaFX & SWT 1
E Swing Verzögerung beim Hinzufügen / Ändern von Swingkomponenten AWT, Swing, JavaFX & SWT 3
J Verzögerung bei Änderungen der Anzeige abwarten AWT, Swing, JavaFX & SWT 5
hdi Problem mit ToolTip: Aussehen/Verzögerung AWT, Swing, JavaFX & SWT 7
P Swing Verzögerung von repaint() umgehen AWT, Swing, JavaFX & SWT 15
W Verzögerung à la Tooltip bei mouseEntered AWT, Swing, JavaFX & SWT 19
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
B Swing BalloonTip erscheint nicht in den ersten Zeilen einer JXTable AWT, Swing, JavaFX & SWT 4
B Swing Schritt für Schritt zur ersten GUI AWT, Swing, JavaFX & SWT 6
K Swing setPreferredWidth für JTable funktioniert nur beim ersten Aufruf!? AWT, Swing, JavaFX & SWT 8
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
A Swing Delay (1-4 Sek.) bei JTable und Dialog beim ersten Ausführen AWT, Swing, JavaFX & SWT 3
E Swing JTree ersten unterpunkt dauerhaft verstecken AWT, Swing, JavaFX & SWT 12
T JTable ohne Titel in der ersten Zeile AWT, Swing, JavaFX & SWT 2
J JCombobox in JTable klappt beim ersten Tastendruck zu AWT, Swing, JavaFX & SWT 3
E JTable; Zeilen der ersten Spalte definieren? AWT, Swing, JavaFX & SWT 4
5 Anfängerfrage: Wie starte ich meine ersten Swing-Programme AWT, Swing, JavaFX & SWT 4
isowiz Einige Fragen zur ersten eigenen Sing-Applikation AWT, Swing, JavaFX & SWT 4
J Flackern beim ersten laden von JPanel AWT, Swing, JavaFX & SWT 4
thE_29 Vor dem ersten Posten bitte lesen! AWT, Swing, JavaFX & SWT 0
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
kodela Swing Anzeige des Warten-Cursors AWT, Swing, JavaFX & SWT 8
kodela Verspätete Anzeige in Textfeldern AWT, Swing, JavaFX & SWT 8
F BorderLayout Hilfe bei Anzeige AWT, Swing, JavaFX & SWT 2
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
F Design-Anzeige im Windowbuilder AWT, Swing, JavaFX & SWT 3
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
D JavaFX Control zur Anzeige von eBooks AWT, Swing, JavaFX & SWT 5
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
V JWindow: Falsche Anzeige auf Ubuntu AWT, Swing, JavaFX & SWT 2
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M AWT Gui anzeige Probes - Elemente erscheinen nicht regelmäßig AWT, Swing, JavaFX & SWT 2
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
P Swing Problem mit der Anzeige AWT, Swing, JavaFX & SWT 12
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
M Anzeige updatet sich erst am Ende des Programms AWT, Swing, JavaFX & SWT 3
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
J Kleines Anzeige Problem(nur blanker Frame) AWT, Swing, JavaFX & SWT 22
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
N Swing JTextPane zur Anzeige von HTML AWT, Swing, JavaFX & SWT 2
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
M TabbpedPane Anzeige aktualisieren AWT, Swing, JavaFX & SWT 6
S Anzeige von Beschleunigungswerten AWT, Swing, JavaFX & SWT 2
S Anzeige eines JWindows AWT, Swing, JavaFX & SWT 3
N jcomboBox anderer Wert als Anzeige AWT, Swing, JavaFX & SWT 6
B Swing Java crashed nach Anzeige JOptionePane AWT, Swing, JavaFX & SWT 20
S Probleme mit Anzeige von JComboBox AWT, Swing, JavaFX & SWT 2
J Anzeige AWT, Swing, JavaFX & SWT 5
timbeau Gitter in Sudoko-Anzeige AWT, Swing, JavaFX & SWT 9
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
D Swing Anzeige während eines Ladevorganges AWT, Swing, JavaFX & SWT 6
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
C SWT SWT Browser anzeige bug AWT, Swing, JavaFX & SWT 3
A Einschreiten vor anzeige eines Frames AWT, Swing, JavaFX & SWT 26
P JTree - Explorer mit nur eingeschränkter Anzeige AWT, Swing, JavaFX & SWT 17
T SWT Keine Anzeige der Widgets nach Comboauswahl AWT, Swing, JavaFX & SWT 2
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
B SWT Textdatei Lesen und Anzeige in View - Zeichensatzproblem AWT, Swing, JavaFX & SWT 4
hdi JTree: interne Daten OK, Anzeige schwarze Magie AWT, Swing, JavaFX & SWT 2
R Anzeige der Aktivität AWT, Swing, JavaFX & SWT 3
S Splash Screen / "Loading" Anzeige im Programm AWT, Swing, JavaFX & SWT 27
S JTree - Anzeige des Knotennamen ändern AWT, Swing, JavaFX & SWT 2
B JList Anzeige aktualisieren (Models) AWT, Swing, JavaFX & SWT 2
G Keine Anzeige des Balkens AWT, Swing, JavaFX & SWT 3
C JTable aktualisiert die Anzeige nicht AWT, Swing, JavaFX & SWT 2
G Anzeige schwierigkeiten AWT, Swing, JavaFX & SWT 3
G Problem mit Anzeige von HTML AWT, Swing, JavaFX & SWT 5
P JRE 6 -> ToolTip & mnemonic Anzeige AWT, Swing, JavaFX & SWT 4
G JComboBox - Anzeige mit Wert verknüpfen AWT, Swing, JavaFX & SWT 3
G Anzeige Problem AWT, Swing, JavaFX & SWT 4
D Anzeige eines Bildes: JPanel oder JLabel ? AWT, Swing, JavaFX & SWT 3
T dynamische anzeige? AWT, Swing, JavaFX & SWT 4
W JList Anzeige erneuern AWT, Swing, JavaFX & SWT 4
P JMenuBar und JToolBar Anzeige Probleme AWT, Swing, JavaFX & SWT 5
T JComboBox anzeige AWT, Swing, JavaFX & SWT 6
F Anzeige von JPanel AWT, Swing, JavaFX & SWT 3
M JTree und Anzeige des entsprechenden Panels AWT, Swing, JavaFX & SWT 5
K Probleme mit der Anzeige eines einzigen Nodes in einem JTree AWT, Swing, JavaFX & SWT 9
S SWT-Widgets für Anzeige-Elemente AWT, Swing, JavaFX & SWT 3
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2
M GUI mit Swing erst nach Maximieren richtige Anzeige AWT, Swing, JavaFX & SWT 2
S Anzeige der Benutzeroberfläche verzögern AWT, Swing, JavaFX & SWT 10
G Anzeige von JTextField erneuern AWT, Swing, JavaFX & SWT 12
P DefaultTreeCellEditor -> Anzeige Probleme AWT, Swing, JavaFX & SWT 3
swek Flackernde Anzeige AWT, Swing, JavaFX & SWT 4
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
A JTree-Anzeige filtern AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben