Hi,
ich habe viele ähnliche Postings gelesen, aber irgendwie komme ich nicht zur Lösung meines Problems. Ich habe ein JLabel, dem ich zur Laufzeit einen neuen Text zuweisen möchte. Mein Hauptthread (Frame) wird wie folgt gestartet:
Auf der Form befindet sich eine JTable, deren Click-Event abgefangen wird und folgenden Code aufruft:
Nun erfolgt aber weder in Zeile 7 noch in Zeile 28 die gewünschte Änderung des Labels. Nachdem der 2. Thread den Text geändert hat, sehe ich den Erfolg über das System.err.println in Zeile 27 und erst ganz zum Schluß die beiden Ausgaben von "IN ADDEVENT" in Zeile 38.
Kann mir jemand helfen?
Gruß
ich habe viele ähnliche Postings gelesen, aber irgendwie komme ich nicht zur Lösung meines Problems. Ich habe ein JLabel, dem ich zur Laufzeit einen neuen Text zuweisen möchte. Mein Hauptthread (Frame) wird wie folgt gestartet:
Code:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ATC_Frame().setVisible(true);
}
});
}
Auf der Form befindet sich eine JTable, deren Click-Event abgefangen wird und folgenden Code aufruft:
Code:
1 private void tueWas() {
2 String[] conn_status = new String[2];
3 conn_status[0] = "Verbindung wird aufgebaut";
5 System.err.println(conn_status[0]);
6 //setText des Labels soll ausgeführt werden
7 SwingUtilities.invokeLater( new AddEvent(lblMeldung, conn_status[0]) );
8 thread1 = new thread1_klasse(x, x, x, x, x);
9 thread1.start();
10 //Ich übergebe das String-Array, damit ich ein Call-By-Reference habe
11 //und der Zweite Thread das hier lokale conn_status[0] änder kann
12 thread1.starteThread2(x, x, x, conn_status);
13 //Hier wird die Änderung von conn_status[0] durch Thread2 abgewartet
14 while (conn_status[0].equals("Verbindung wird aufgebaut")) {
15 try
16 {
17 Thread.sleep(1000);
18 System.out.println("Warte");
19 }
20 catch(Exception e)
21 {
22 e.ToString();
23 }
24 }
25 //Nach der Änderung von conn_status[0] durch Thread2 soll der neue Text
26 //Verbindung "steht" oder "steht nicht" angezeigt werden
27 System.err.println(conn_status[0]);
28 SwingUtilities.invokeLater( new AddEvent(lblMeldung, conn_status[0]) );
29 }
30 class AddEvent implements Runnable {
31 private JLabel lbl;
32 private String text;
33 public AddEvent(JLabel lbl, String text) {
34 this.lbl = lbl;
35 text = text;
36 }
37 public void run() {
38 System.out.println("IN ADDEVENT");
lbl.setText( text );
39 }
40 }
Nun erfolgt aber weder in Zeile 7 noch in Zeile 28 die gewünschte Änderung des Labels. Nachdem der 2. Thread den Text geändert hat, sehe ich den Erfolg über das System.err.println in Zeile 27 und erst ganz zum Schluß die beiden Ausgaben von "IN ADDEVENT" in Zeile 38.
Kann mir jemand helfen?
Gruß