In das Label eines anderen Threads schreiben

Stormy744

Neues Mitglied
Hallöchen liebes Java-Forum!

Ich sitze hier seit einigen Stunden vor einem Problemchen, welches für euch hoffentlich keines ist...
Der Code sollte eigentlich ein Label erzeugen, in welchem eine ständig aktualisierte Uhrzeit erscheint.
Das Problem ist nun, dass die verwendeten Timer ja ihre eigenen Threads erzeugen und ich, um in das Label zu schreiben, von einem Thread auf einen anderen "zugreifen" müsste...
Kann mir dabei vllt jemand von euch helfen? Bin für jeden Tipp dankbar...
Zum besseren Verständnis würde ich mich über Code-Beispiele freuen...

Hier noch mein bisheriger Code in leicht gekürzter Form:
Java:
public class UhrR{

	static Shell shellX = new Shell(mainPro.display, SWT.ON_TOP | SWT.BORDER);
	private static Label labeli = new Label(shellX, SWT.NONE);
	private static String uhrzt = "Uhr"; //*****

	public static void main(String[] args) {
		shellX.setSize(1280/5, 1024/4);
		shellX.setLocation(0, 0);
		
		labeli.setText(uhrzt);
		labeli.setLocation(0, 0);
		labeli.setSize(150,20);
		
		//Timer 1 -> aktuelle Uhrzeit in String uhrzt schreiben
		final Timer timer = new Timer();
		TimerTask task = new TimerTask() {
		public void run() {

	   		//Zeit
	   		SimpleDateFormat hourSDF = new SimpleDateFormat("HH");
	   		SimpleDateFormat minSDF = new SimpleDateFormat("mm");
	   		SimpleDateFormat secSDF = new SimpleDateFormat("ss");
	   		
	   		String hourS = hourSDF.format(new Date());
	   		String minS = minSDF.format(new Date());
	   		String secS = secSDF.format(new Date());
	   		
	   		int hourI = Integer.valueOf(hourS).intValue();
	   		int minI = Integer.valueOf(minS).intValue();
	   		int secI = Integer.valueOf(secS).intValue();
	         
	        	uhrzt = hourI + ":" + minI + ":" + secI; //*****
			
		}
		};

		//Timer 2 -> Label aktualisieren
		TimerTask task2 = new TimerTask() {
		public void run() { 

			labeli.setText(uhrzt); //***** <- Im Original-Code ist dies Zeile 271
				
		}
		};

		//start der Timer:
		timer.scheduleAtFixedRate(task, 0, 1000);
		timer.scheduleAtFixedRate(task2, 1, 1000);
		
		//Shell öffnen
		shellX.open();
	}
}

Beim Ausführen des Codes liefert Eclipse mir nach einiger Zeit) folgende Fehlermeldung (ohne Programmabbruch):
Code:
Exception in thread "Timer-0" org.eclipse.swt.SWTException: Invalid thread access
	at org.eclipse.swt.SWT.error(Unknown Source)
	at org.eclipse.swt.SWT.error(Unknown Source)
	at org.eclipse.swt.SWT.error(Unknown Source)
	at org.eclipse.swt.widgets.Widget.error(Unknown Source)
	at org.eclipse.swt.widgets.Widget.checkWidget(Unknown Source)
	at org.eclipse.swt.widgets.Label.setText(Unknown Source)
	at Uhr$8.run(Uhr.java:271)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)

Schonmal vielen Dank im Vorraus für eure Unterztützung!!! :toll:


Stormy744
 
T

Tomate_Salat

Gast
GUI Freeze ("EDT" bei SWT?)

Hier lag auch das Problem vor. Du brauchst:

Synchrones ausführen
Java:
display.syncExcec(Runnable);

Asynchrones ausführen
Java:
display.asyncExcec(Runnable);

Ich empfehle den Aufruf über die Display-Referenz (eigene Erfahrungen, die zugegebnermaßen nicht sonderlich groß sind ^^)

MFG

Tomate_Salat
 

Stormy744

Neues Mitglied
Hier nochmal für alle, die ein ähnliches Problem haben, die Lösung:
Java:
public class UhrR{
 
    static Shell shellX = new Shell(mainPro.display, SWT.ON_TOP | SWT.BORDER);
    private static Label labeli = new Label(shellX, SWT.NONE);
    private static String uhrzt = "Uhr"; //*****
 
    public static void main(String[] args) {
        shellX.setSize(1280/5, 1024/4);
        shellX.setLocation(0, 0);
        
        labeli.setText(uhrzt);
        labeli.setLocation(0, 0);
        labeli.setSize(150,20);
        
        //Timer 1 -> aktuelle Uhrzeit in String uhrzt schreiben
        final Timer timer = new Timer();
        TimerTask task = new TimerTask() {
        public void run() {
 
            //Zeit
            SimpleDateFormat hourSDF = new SimpleDateFormat("HH");
            SimpleDateFormat minSDF = new SimpleDateFormat("mm");
            SimpleDateFormat secSDF = new SimpleDateFormat("ss");
            
            String hourS = hourSDF.format(new Date());
            String minS = minSDF.format(new Date());
            String secS = secSDF.format(new Date());
            
            int hourI = Integer.valueOf(hourS).intValue();
            int minI = Integer.valueOf(minS).intValue();
            int secI = Integer.valueOf(secS).intValue();
             
                uhrzt = hourI + ":" + minI + ":" + secI; //*****
            
        }
        };
 
        //Timer 2 -> Label aktualisieren
        TimerTask task2 = new TimerTask() {

			public void run() {

				mainPro.display.asyncExec(new Runnable() {
			        public void run() {
			        	labeli.setText(uhrzt); //*****
			        }
				});
			}
		};
 
        //start der Timer:
        timer.scheduleAtFixedRate(task, 0, 1000);
        timer.scheduleAtFixedRate(task2, 1, 1000);
        
        //Shell öffnen
        shellX.open();
    }
}


Und nochmal vielen Dank an Tomate_Salat :applaus:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Ausgabe eines Arrays auf Label (Javafx) Java Basics - Anfänger-Themen 4
T Icon eines Label speichern Java Basics - Anfänger-Themen 9
M Label in die Mitte eines Swing Fensters Java Basics - Anfänger-Themen 2
rafi072001 Assoziation zwischen Musiker und Label Java Basics - Anfänger-Themen 1
J Hilfe beim Label animieren Java Basics - Anfänger-Themen 1
J Java FX - Label aktualisieren Java Basics - Anfänger-Themen 1
M Java GUI label ändert sich erst zum Schluss Java Basics - Anfänger-Themen 4
S Counter Label Button Java Basics - Anfänger-Themen 4
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
J Einen Buttonklick in Label anzeigen Java Basics - Anfänger-Themen 6
J Erste Schritte Mit repaint() ist Label nicht sichtbar Java Basics - Anfänger-Themen 15
V Label-Problem Java Basics - Anfänger-Themen 4
H Stringanzeige in einem Label Java Basics - Anfänger-Themen 2
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
KeVoZ_ Label auf JFrame willkürlich Positionieren Java Basics - Anfänger-Themen 2
N Dynamisch erzeugtes Label wird nicht angezeigt, TextField schon Java Basics - Anfänger-Themen 1
V Die die aktuelle Größe zusätzlich in einem Label angezeigt wird Java Basics - Anfänger-Themen 11
T Erste Schritte 2 Codes zusammen fügen / Label in JFrame Java Basics - Anfänger-Themen 1
S Java Label hat komischen text Java Basics - Anfänger-Themen 4
S Label Wert zuweisen Java Basics - Anfänger-Themen 8
F Erste Schritte Label Text vor Methodenaufruf setzen Java Basics - Anfänger-Themen 17
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
S Label in Vordergrund Java Basics - Anfänger-Themen 4
G GUI Label Werte ersetzen Java Basics - Anfänger-Themen 25
D String aus txt in label für Tabelle einfügen Java Basics - Anfänger-Themen 8
W GUI Label, ComboBox Java Basics - Anfänger-Themen 4
M BufferedReader => TextField/Label Java Basics - Anfänger-Themen 8
M Ausgabe einer ArrayList auf einem Label Java Basics - Anfänger-Themen 4
W Java label nicht ansprechbar Java Basics - Anfänger-Themen 7
J Uhr:Label aktuallisieren Java Basics - Anfänger-Themen 7
J Zeichen für Durchmesser Ø in Label darstellen Java Basics - Anfänger-Themen 15
J Panel + Label anzeigen - Ich kriege es nicht hin Java Basics - Anfänger-Themen 3
C Panel und Label überdecken sich Java Basics - Anfänger-Themen 2
L Label + MouseListener Java Basics - Anfänger-Themen 12
P Label Array in mouseEntered vergleichen Java Basics - Anfänger-Themen 4
J JPG in einem Label einfügen und anzeigen lassen Java Basics - Anfänger-Themen 2
C Aktueller Wert von einem JSlider auf ein Label Java Basics - Anfänger-Themen 2
J "label.setText" funktioniert nicht Java Basics - Anfänger-Themen 9
C JSlider und JRadioButton auf Label anzeigen? Java Basics - Anfänger-Themen 10
K Werte von 2 Klassen austauschen/ Bild im Label ändern Java Basics - Anfänger-Themen 12
R Text vom Label ändern Java Basics - Anfänger-Themen 14
D Vererbung ProcessBar mit einem Label Java Basics - Anfänger-Themen 4
W Anordnung von Label und Button Java Basics - Anfänger-Themen 2
S NullPointerException beim Checkbox-Label-Array mit nextLine() Java Basics - Anfänger-Themen 6
Z Label verschwindet in JScrollPane Java Basics - Anfänger-Themen 7
J Elegante Art mehrere Label mit einem icon zu setzen Java Basics - Anfänger-Themen 13
S Warum zeigt das Label nichts an??? Java Basics - Anfänger-Themen 9
N Text in Label ändern Java Basics - Anfänger-Themen 11
C Label ändert ändert sich nicht Java Basics - Anfänger-Themen 4
M Label verschwindet? Java Basics - Anfänger-Themen 3
P Label erstellen und positionieren Java Basics - Anfänger-Themen 5
A TextField + Label = ? Java Basics - Anfänger-Themen 7
Stillmatic1985 Label in einem Frame zentrieren Java Basics - Anfänger-Themen 4
K Button Label lesen Java Basics - Anfänger-Themen 4
Z integer auf Label ausgeben Java Basics - Anfänger-Themen 12
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Label wird nicht richtig dargestellt Java Basics - Anfänger-Themen 2
G Textfeld und Label in einem Tab? Anfänger braucht Hilfe Java Basics - Anfänger-Themen 3
G Hilfe: Label soll ganz nach oben! Java Basics - Anfänger-Themen 6
S Bild im Label ändern Java Basics - Anfänger-Themen 2
T Sonderzeichen in label Java Basics - Anfänger-Themen 4
S break Label als Spungmarken vorher definieren Java Basics - Anfänger-Themen 4
K Wieder Label anzeigen lassen ? Java Basics - Anfänger-Themen 3
K Ergebnisse auf einem Label anzeigen lassen ? Java Basics - Anfänger-Themen 20
P Label nicht bei Progressbar zu sehen Java Basics - Anfänger-Themen 8
K Schrift groesse in einem Label zeigen lassen ! Java Basics - Anfänger-Themen 2
D ImageIcon in Label Java Basics - Anfänger-Themen 7
A label update Java Basics - Anfänger-Themen 10
F Label Schriftfarbe Java Basics - Anfänger-Themen 4
H Text aus Textfeld per Actionlistener in Label ausgeben. Java Basics - Anfänger-Themen 6
N Überprüfen ob ein Label angeklickt wurde Java Basics - Anfänger-Themen 3
K Array im Label ausgeben ? Java Basics - Anfänger-Themen 10
T Label mehrzeilig? Java Basics - Anfänger-Themen 7
S Abfragen ob Label enabled ist . Java Basics - Anfänger-Themen 2
G Array Label Java Basics - Anfänger-Themen 6
S Von anderer Klasse auf Label zugreifen Java Basics - Anfänger-Themen 6
G Hintergrundbild mit Transparentem Label Java Basics - Anfänger-Themen 5
D "Ueber"-Klasse? / Label Array Probleme Java Basics - Anfänger-Themen 2
T per Button soll inhalt aus Tecxfield in Label übertragen wer Java Basics - Anfänger-Themen 5
H Drehen von Label Java Basics - Anfänger-Themen 2
D Automatische Label übertragung Java Basics - Anfänger-Themen 3
B Label wird ungewollt mehrmals erstellt Java Basics - Anfänger-Themen 16
J label.getSize() gibt 0 ? Java Basics - Anfänger-Themen 2
M Berechnung in Label ausgeben? Java Basics - Anfänger-Themen 3
G Zusatzinfos in einem Label ablegen Java Basics - Anfänger-Themen 10
B In einem Label "Zeilenumbruch" Java Basics - Anfänger-Themen 4
G ein Label FETT ung GROSS ausgeben Java Basics - Anfänger-Themen 4
V Auf Label schreiben Java Basics - Anfänger-Themen 3
J Index für ein Label Java Basics - Anfänger-Themen 8
M Text in Label per Button Java Basics - Anfänger-Themen 4
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben