Hi,
ich habe ein wirklich ärgerliches Problem mit JLabel. In meinem Programm läuft ein Thread der Berechnungen macht.
Ein Statusfenster zeigt während der Laufzeit des Threads an was das Programm gerade tut.
Innerhalb des Quellcodes der für die Berechnungen zuständig ist rufe ich immer wieder eine Methode einer anderen Klasse auf welche dann das Statusfenster aktualisieren soll.
Das Problem ist nun, dass die Methode JLabel.setText() das entsprechende Feld im Statusfenster mit einem völlig falschen Wert überschreibt und der alte und der neue Text sich dann überlagern.
Dies ist ein Auszug aus dem Aufbau des Statusfensters.
Ich verzichte bewusst darauf den ganzen Code hinzuschreiben um die Sache nicht unnötig aufzublähen...
Dies ist der "schuldige" Thread...
...und so wird er aufgerufen
Die folgende Methode soll während der Laufzeit des Threads das Label ändern.
Ich hoffe der Code für das Statusfenster ist nicht zu kurz geraten. Falls es nötig ist kann ich auch den
ganzen Code nochmal abdrucken.
Hat jemand eine Ahnung aus welchem Grund das Problem hier auftritt?
Ich freue mich über jede Anregung zu dieser Geschichte.
Vielen Dank im voraus
Gruß
Paladin
ich habe ein wirklich ärgerliches Problem mit JLabel. In meinem Programm läuft ein Thread der Berechnungen macht.
Ein Statusfenster zeigt während der Laufzeit des Threads an was das Programm gerade tut.
Innerhalb des Quellcodes der für die Berechnungen zuständig ist rufe ich immer wieder eine Methode einer anderen Klasse auf welche dann das Statusfenster aktualisieren soll.
Das Problem ist nun, dass die Methode JLabel.setText() das entsprechende Feld im Statusfenster mit einem völlig falschen Wert überschreibt und der alte und der neue Text sich dann überlagern.
Dies ist ein Auszug aus dem Aufbau des Statusfensters.
Ich verzichte bewusst darauf den ganzen Code hinzuschreiben um die Sache nicht unnötig aufzublähen...
Code:
l_label1 = new JLabel("Abrechnungsdatei wird eingelesen"); //Dieser Text erscheint in l_tabelleanlegen wenn
//ich versuche innerhalb des Thread JLabel.setText auszuführen.
l_label1.setFont(ueberschrift);
JLabel l_label2 = new JLabel("Aufgaben");
l_label2.setFont(ueberschrift);
l_tabellenanlegen = new JLabel(" - Tabellen anlegen (0 / 6)"); //Dieses Label soll geändert werden
l_tabellenanlegen.setFont(normal_black);
JLabel l_label4 = new JLabel("Tabellen füllen");
l_label4.setFont(normal);
l_tabelleambulant = new JLabel(" - Tabelle Ambulante Behandlung (0 Datensätze)");
l_tabelleambulant.setFont(normal_black);
l_tabelleueberweisung = new JLabel(" - Tabelle Überweisung (0 Datensätze)");
l_tabelleueberweisung.setFont(normal_black);
l_tabellebeleg = new JLabel(" - Tabelle Belegärztliche Behandlung (0 Datensätze)");
l_tabellebeleg.setFont(normal_black);
l_tabellenotfall = new JLabel(" - Tabelle Notfalldienst (0 Datensätze)");
l_tabellenotfall.setFont(normal_black);
p_readadt_north.add("Center", l_label1);
p_readadt_north.add("North", p_whitepanel1);
p_readadt_north.add("West", p_whitepanel2);
p_readadt_north.add("East", p_whitepanel3);
p_readadt_north.add("South", p_whitepanel4);
Dies ist der "schuldige" Thread...
Code:
class readADTData implements Runnable {
public void run() {
TransferADTIntoDerbyDB transfer = new TransferADTIntoDerbyDB();
returnval = transfer.TransferADTIntoDerbyDB(ergebnis,menu);
}
}
...und so wird er aufgerufen
Code:
Thread readADT = new Thread(new readADTData());
readADT.setPriority(Thread.MIN_PRIORITY);
readADT.start();
Die folgende Methode soll während der Laufzeit des Threads das Label ändern.
Code:
public void setText_tablenotfall(int i) {
l_tabellenotfall.setText(" - Tabelle Notfalldienst (" + i + " Datensätze)");
l_tabellenotfall.validate();
}
Ich hoffe der Code für das Statusfenster ist nicht zu kurz geraten. Falls es nötig ist kann ich auch den
ganzen Code nochmal abdrucken.
Hat jemand eine Ahnung aus welchem Grund das Problem hier auftritt?
Ich freue mich über jede Anregung zu dieser Geschichte.
Vielen Dank im voraus
Gruß
Paladin