Thread-Problem (Aktualisierung von JLabel-Komponente)

Status
Nicht offen für weitere Antworten.

Ralf Ueberfuhr

Bekanntes Mitglied
Ich habe folgende Situation:

Ich möchte Benutzerdaten in einer Liste darstellen. Dazu gehört auch ein Bild. Die Daten werden übers Netzwerk aus der Datenbank geladen. Da Bilder etwas länger brauchen, werden sie separat in einem Thread Stück für Stück geladen.

Wenn ein Bild fertig ist, so soll es in einem JLabel in der Liste angezeigt werden. Leider funktioniert das nicht. Das Bild wird gesetzt (System.out.println(...) als Kontrollausgabe), aber die Komponente nicht aktualisiert.

Es muss am Thread liegen, denn wenn ich ihn nicht mit start(), sondern run() ins Laufen bringe, klappt es. Nur läuft er dann eben nicht parallel.

Und mit SwingUtilities.invokeLater(...) und ...invokeAndWait(...) hab ich auch schon rumgedoktort.

Was muss ich tun?
 

tini

Bekanntes Mitglied
OT: mich liebhaben :wink:

Was haste denn schon versucht, ums zu aktualisieren?
validate, repaint, updateUI, SwingUtilities#updateComponentTreeUI, ...
Funktioniert denn wirklich keine davon?
 

tini

Bekanntes Mitglied
Komisch, komisch.

Ich fürchte, dann kann ich dir nicht weiterhelfen. Da musste warten bis ein Thread-Spezialist vorbeikommt. Vielleicht weiß der ja Rat.
 

Bleiglanz

Gesperrter Benutzer
EIN Thread A um das Bild aus der DB abzuholen

diesen Thread A aus einem Eventhandler heraus starten (mit run)

Am Ende dieses Threads A, d.h. wenn alles fertig ist mit invokeLater das Bild für Swing "bekanntmachen" (JLabel mit Icon? oder wie??) UND dann noch repaint aufrufen für diese Komponente
 

Ralf Ueberfuhr

Bekanntes Mitglied
Bleiglanz hat gesagt.:
EIN Thread A um das Bild aus der DB abzuholen

diesen Thread A aus einem Eventhandler heraus starten (mit run)

Am Ende dieses Threads A, d.h. wenn alles fertig ist mit invokeLater das Bild für Swing "bekanntmachen" (JLabel mit Icon? oder wie??) UND dann noch repaint aufrufen für diese Komponente

Ok, das funktioniert, nur möchte ich die Sache nicht aus einem Eventhandler starten, sondern innerhalb einer Methode, die aufgerufen wird, um die Benutzerdaten zum JPanel hinzuzufügen.

Ich bin nicht sher erfahren in der Richtung. Ich kann nicht ganz nachvollziehen, warum das z.B. beim Mausklick (Starten per MouseListener#mouseclicked) funktioniert, aber nicht bem Starten aus der Methode zum Setzen der Benutzerdaten.

Auf Internetseiten werd ich auch nicht so schlau.
 

Ralf Ueberfuhr

Bekanntes Mitglied
Mal ein paar Details:

Ich habe einen JPanel, mit JLabels für Benutzernamen, Beschreibung und dem Bild. Dieser Panel hat die Methode setItem(User user), in der die Benutzerdaten gesetzt werden sollen.

Falls es interessant ist:
Code:
	public void setItem(final User user) {
		this.user = user;
		setTitle(user == null ? "" : user.getName());
		setDescription(user == null ? "" : (user.getLastLogin() == null ? "Der Benutzer war bislang noch nicht aktiv." : "zuletzt aktiv am " + new SimpleDateFormat("dd.MM.yyyy").format(user.getLastLogin())));
		setIcon(getEmptyIcon());
		if((user != null) && (user.getImage() != null)) Cache.getInstance(User.class).cache(user.getImage(), new CacheListener() {
			public void fileCached(File file, final java.io.File cachedFile) {
				try {
					setIcon(new ImageIcon(ImageLibrary.getImage(cachedFile).getScaledInstance(75, 75, Image.SCALE_DEFAULT)));
					// Einfach mal alles probieren
					SwingUtilities.updateComponentTreeUI(UserPanel.this.getRootPane() != null ? UserPanel.this.getRootPane() : UserPanel.this);
					repaint();
					validateTree();
					updateUI();
				} catch (Throwable t) {
					t.printStackTrace();
				}
			}
			public void fileNotCached(File file, Throwable t) {}
			});
	}

Cache ist hier die Klasse, die einen Thread zum Download startet. Die letzte Anweisung dieses Threads ist das Aufrufen des CacheListeners.

Vielleicht wird hierbei mein Fehler ersichtlich.
 

Bleiglanz

Gesperrter Benutzer
alles in einem Swing-Programm läuft "innerhalb" von Eventhandlern

oder wann wird denn deine Methode aufgerufen? Von wem?
 

Ralf Ueberfuhr

Bekanntes Mitglied
Ich klicke ein JLabel, um einen Dialog zu öffnen. Diesem Dialog übergebe ich nach Initialisierung die User-Instanzen.

Die Darstellung erfolgt in einer Art Liste (keine JList) von JPanels, die diese setItem(...)-Methode besitzen - ein Panel für eine User-Instanz.

Das Problem ist, dass ich den Thread zum Download nur in der setItem-Methode aufrufen kann/möchte.

Also nach dem Motto: Initialisiere den Dialog, stelle die Informationen dar, die bereit stehen und lade die größeren Daten (Bilder) Stück für Stück nach und stelle sie dann dar.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
T thread.sleep Sprung Problem AWT, Swing, JavaFX & SWT 24
A Sleep Funktion / Thread-Problem ! AWT, Swing, JavaFX & SWT 11
S Problem mit 2 Thread.sleep AWT, Swing, JavaFX & SWT 3
B ActionListener, Thread, JButton Problem AWT, Swing, JavaFX & SWT 2
T Problem mit Oberfläche und Thread AWT, Swing, JavaFX & SWT 10
U Problem mit zweitem Thread AWT, Swing, JavaFX & SWT 10
S Problem mit Thread AWT, Swing, JavaFX & SWT 9
M JTextArea in JScrollPane, Problem mit Thread.sleep() AWT, Swing, JavaFX & SWT 5
C Problem beim Ausführen von Thread per Button AWT, Swing, JavaFX & SWT 2
G Problem GUI - thread AWT, Swing, JavaFX & SWT 12
F Problem mit Thread AWT, Swing, JavaFX & SWT 5
P thread nimmt veränderte boolean nicht AWT, Swing, JavaFX & SWT 7
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
M Server/Client thread von GUI Trennen AWT, Swing, JavaFX & SWT 2
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
C Thread verwalten AWT, Swing, JavaFX & SWT 2
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
T JavaFX Task / Thread / FXThread Komplikationen AWT, Swing, JavaFX & SWT 5
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
L JavaFX UI Thread block AWT, Swing, JavaFX & SWT 13
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX UI-Thread und DB-Thread trennen um z.B. Ladebalken anzuzeigen AWT, Swing, JavaFX & SWT 15
T JavaFX Controller im extra Thread AWT, Swing, JavaFX & SWT 0
T Swing 2 Thread.sleep parallel laufen lassen AWT, Swing, JavaFX & SWT 4
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
C Thread in Klassen starten AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
K JavaFX Tableview mit fxml ohne Aktualiserung trotz Thread AWT, Swing, JavaFX & SWT 13
K Event Handling 2 Buttons und Thread stop AWT, Swing, JavaFX & SWT 3
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
J Applet Paralleles Thread Handling AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
T Java Swing Main GUI Thread AWT, Swing, JavaFX & SWT 3
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
S SWT GUI-Thread AWT, Swing, JavaFX & SWT 11
A Thread und sleep(1000); AWT, Swing, JavaFX & SWT 7
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7
S Timer oder Thread.sleep AWT, Swing, JavaFX & SWT 3
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
B Über SWT Button Thread beenden AWT, Swing, JavaFX & SWT 2
C SWT Gui Thread hängt sich auf AWT, Swing, JavaFX & SWT 3
lumo SWT Exception in thread "main" org.eclipse.swt.SWTError: No more handles AWT, Swing, JavaFX & SWT 3
G 2D-Grafik Von Thread aus Zeichnen AWT, Swing, JavaFX & SWT 5
U Swing JLabel bewegen mittels Thread AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
R JTable und Thread AWT, Swing, JavaFX & SWT 4
K Thread.sleep in GUI AWT, Swing, JavaFX & SWT 4
J Thread funktioniert nicht AWT, Swing, JavaFX & SWT 10
D JPanel mit Thread in JPanel AWT, Swing, JavaFX & SWT 4
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
P Teil einer Swing GUI in eigenem Thread AWT, Swing, JavaFX & SWT 4
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
F SWT table refresh per Thread AWT, Swing, JavaFX & SWT 2
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
J AWT Artefakte bei AWT-Rendering durch parallelen Thread AWT, Swing, JavaFX & SWT 4
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
Burny91 Swing Thread mit wait() und notify() steuern AWT, Swing, JavaFX & SWT 22
N SWT - über Thread Composite erstellen und Anhängen AWT, Swing, JavaFX & SWT 6
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
F Merkwürdiges Verhalten zeichnen sperater Thread AWT, Swing, JavaFX & SWT 13
B Swing Swing und Thread.sleep() AWT, Swing, JavaFX & SWT 6
N Exception Behandlung mit setDefaultUncaughtExceptionHandler, insbesondere im EventDispatcher Thread AWT, Swing, JavaFX & SWT 4
Q Neuer Thread zum Öffnen AWT, Swing, JavaFX & SWT 2
P Swing GUI im Thread? AWT, Swing, JavaFX & SWT 5
T GUI JFrame - neuer Thread AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben