JList Aktualisieren funktioniert nur Zufällig

Status
Nicht offen für weitere Antworten.

Luk

Mitglied
Hallo

Ich bin gerade dabei ein Programm zu schreiben, das Daten aus einer Excel liste ausließt und diese dann an eine JList (DefaultListModel) übergibt.

Die Daten werden in einem eigenen Thread ausgelesen, dies klappt auch wunderbar.
Die ausgelesenen Daten werden dann in einem Objekt gespeichert (klappt auch)
Diese Objekte werden dann in einer LinkedList gespeichert (klappt auch)
Diese Liste wird dann an die Ausgabe übergeben (klappt auch)
Dies ist die Ausgabe Klasse, sie wird vor dem Starten des Threads erzeugt:
Java:
public class AuftragsListe extends JPanel {
	private LinkedList<Projekt> projekte;
	private DefaultListModel mod;
	private JList liste;
	AuftragsListe(){
		projekte = new LinkedList<Projekt>();
		mod = new DefaultListModel();
		liste = new JList(mod);
		JScrollPane p = new JScrollPane(liste);
		this.add(p);
	}

	private String getProjektString(Projekt in){
		return ("Frei: "+(in.getTB_Stunden()-in.getTB_Verbraucht())+
				" Gesamt: "+in.getTB_Stunden()+
				" Nummer: "+in.getAuftragsnummer()+
				" Name: "+in.getName());
	}
	public void addProjekt(Projekt in){
		String einf = getProjektString(in);
		System.out.print("wird eingefügt mit: "+einf+" ");
		mod.addElement(einf);
		projekte.add(in);		
	}
	public void addProjektListe(LinkedList<Projekt> in){
		System.out.println("Projekte werden eingefügt "+in.size()+" stück");
		for(Projekt p : in){
			System.out.print("Projekt "+p.getName()+" ");
			addProjekt(p);
			System.out.print(" Projekt erfolgreich Eingefügt\n");
		}		
		
		liste.repaint();
		System.out.println("Projekte wurden eingefügt "+in.size()+" stück");
	}}
Die Ausgaben mit System.out.println(…) funktioniert. Allerdings wird die JList nicht immer aktualisiert. Man sieht allerdings, dass sich etwas getan hat und zwar wird der Scrollbalken in der Horizontalen länger, so als ob etwas eingefügt wurde. Manchmal sieht man sogar ganz kurz einen Inhalt, dieser verschwindet aber meistens sofort wieder. Es scheint fast so, als ob der Inhalt wieder gelöscht wird.

Erst dachte ich, das die Daten mit beenden des Threads gelöscht werden, darum hab ich ihn nach der übergabe der Daten für 20 sec schlafen gelegt, mit selben Ergebnis.

Hab auch schon versucht die Daten von Hand einzugeben, also ohne Thread, dann klappt alles wunderbar.

Hier der Thread, der die Daten ausliest:
Java:
public class ExcelZeiten extends Thread{
	private Einstellungen einst;
	private Event event;
	private Sheet sheet;
	private LinkedList<Projekt> Projekte;
	public ExcelZeiten(Event eventi){
		event = eventi;
		this.einst = event.getEinst();
		Projekte = new LinkedList<Projekt>();
		this.start();
	}
	@Override
	public void run(){
		try {
			Workbook work =  Workbook.getWorkbook(new File(einst.ExcelPfad));
			sheet = work.getSheet(0);
			int Start = einst.Start;
			int nichts = 0;
			int schwellle = 4;
			int TB_Stunden, TB_Verbraucht;
			String Name, Auftragsnummer;
			while(nichts<schwellle){
				Cell cell = sheet.getCell(einst.ZeitenGesamt, Start);				
				TB_Stunden = Main.StoI(cell.getContents());
				cell = sheet.getCell(einst.ZeitenVerbraucht, Start);
				TB_Verbraucht = Main.StoI(cell.getContents());
				Name = sheet.getCell(einst.Name, Start).getContents();
				Auftragsnummer = sheet.getCell(einst.Auftragsnummer, Start).getContents();			
				if(Name.equalsIgnoreCase("")){ // Kein Name vorhanden
					if(TB_Stunden == 0){ // Keine Strunden vorhanden
						nichts++;	// ist eine Zwischenzeile
					} else if(Projekte.getLast().getAuftragsnummer().equalsIgnoreCase(Auftragsnummer)){
// Wenn TB_Stunden > 0 dann gehört es wahrscheinlich zum letzten Projekt
						// Auftragsnummer ist gleich > Gleiches Projekt
						Projekte.addLast(new Projekt(Projekte.getLast().getName(), Auftragsnummer, TB_Stunden, TB_Verbraucht));
						nichts = 0;
					} else{
						// Auftragsnummer ist neu > Keine Auftragsnummer/Name in Projekt eintragen
						Projekte.addLast(new Projekt("", "", TB_Stunden, TB_Verbraucht));
						nichts = 0;
					}					
				} else {
					Projekte.add(new Projekt(Name, Auftragsnummer, TB_Stunden, TB_Verbraucht));
					nichts = 0;
				}
				Start++;
			}
			if(Projekte.size()>0){
				event.SetProjekte(Projekte);
			}
			sleep(20000);
			System.out.println("Thread ende");
		} catch (BiffException e) {			
			e.printStackTrace();
		} catch (IOException e) {			
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	
}

Die Daten werden bei 20 Versuchen ung. 2 mal richtig übernommen und ung. 5 mal sieht man kurz eine Eingabe.

Hat jemand eine Idee, an was dies liegen kann?

Vielen dank fürs Drüberschauen

Luk
 

Marco13

Top Contributor
Hm. Der Effekt klingt eigentlich nicht, als sollte das die Ursache sein ... ein KSKB könnte helfen, aber vermutlich ist der Fehler schwer nachzuvollziehen... aber du kannst mal versuchen, das mod.addElement(einf);
in ein
Java:
SwingUtilities.invokeLater(new Runnable()
{  
    public void run()
    {
        mod.addElement(einf);
    }
});
einzuwickeln....
 

Luk

Mitglied
Super, klappt jetzt zu 100%.
Vielen Dank! :toll:

Wenn jemand diesen Fehler nachvollziehen kann, könnte er dann bitte eine kurze Erklärung schreiben?
Würde mich sehr interessieren, warum dieser Fehler aufgetreten ist um verwandte Fehler auszuschließen.

Gruß Luk
 

Marco13

Top Contributor
Schau mal hier Threads and Swing

Der entscheidende Satz:
Once a Swing component has been realized, all code that might affect or depend on the state of that component should be executed in the event-dispatching thread.
(... was genau mit diesem SwingUtilities-Dingens erreicht wird...)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
E JList GUI aktualisieren? Java Basics - Anfänger-Themen 3
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
T JList aktualisieren Java Basics - Anfänger-Themen 12
G JList - aktualisieren Java Basics - Anfänger-Themen 6
M JList Datenstring erweitern und JList aktualisieren Java Basics - Anfänger-Themen 5
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
D JList ListSelectionEvent entfernen? Java Basics - Anfänger-Themen 13
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
S Export aus JList Java Basics - Anfänger-Themen 6
M Erste Schritte JList einträge Java Basics - Anfänger-Themen 1
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
M Erste Schritte Auswahl in einer JList Java Basics - Anfänger-Themen 2
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
S jList --> Array einfügen und Liste löschen Java Basics - Anfänger-Themen 5
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
I in listFiles() oder JList Dateiendungen entfernen Java Basics - Anfänger-Themen 14
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
B JFileChooser und JList Java Basics - Anfänger-Themen 7
OnDemand Enumeration <> JList Java Basics - Anfänger-Themen 5
P Mehrfachauswahl in einer JList Java Basics - Anfänger-Themen 2
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
C .txt und Jlist Java Basics - Anfänger-Themen 10
J Daten in eine JList einfügen Java Basics - Anfänger-Themen 6
A JList / toString modify Java Basics - Anfänger-Themen 2
K jlist an text anpassen Java Basics - Anfänger-Themen 3
D Erste Schritte JList + Checkbox Java Basics - Anfänger-Themen 5
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
A JList bearbeiten Java Basics - Anfänger-Themen 2
M Index einer JList ausgeben Java Basics - Anfänger-Themen 4
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
S ListModel - Anzeige im JList Java Basics - Anfänger-Themen 4
H JList Java Basics - Anfänger-Themen 2
G JList Objekte richtig anzeigen in JDK 6 Java Basics - Anfänger-Themen 5
U JList Java Basics - Anfänger-Themen 6
L HashMap zu JList Java Basics - Anfänger-Themen 6
C Input/Output Inhalte von ArrayList und JList in Datei schreiben Java Basics - Anfänger-Themen 5
M Jlist Elemente hinzufügen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
M BeanBinding Jlist an Jlabel Java Basics - Anfänger-Themen 2
M GUI JList - Objekte listen u. Feld anzeigen? Java Basics - Anfänger-Themen 16
JAVAnnik JList Auswahl Java Basics - Anfänger-Themen 2
Z In JList per Doppelklick eine Datei öffnen (z.B. ein PDF) Java Basics - Anfänger-Themen 16
P Jlist + Popupmenu Java Basics - Anfänger-Themen 10
M Properties Eintrag löschen, welcher in der JList "ausgewählt" wurde Java Basics - Anfänger-Themen 2
c_sidi90 File Array an Jlist übergeben Java Basics - Anfänger-Themen 11
B JList und JTable: leere Zeilen bei listfiles(); Java Basics - Anfänger-Themen 5
N DefaultListModel auf JList sortieren Java Basics - Anfänger-Themen 7
A JList mit Überschrift Java Basics - Anfänger-Themen 2
K Scrollbalken in JList funktioniert nicht Java Basics - Anfänger-Themen 9
B JList wird nicht aktualisiert bzw hat keine Items Java Basics - Anfänger-Themen 2
D JList nicht sichtbar Java Basics - Anfänger-Themen 4
B JList mit Scrollbar? Java Basics - Anfänger-Themen 7
K Datenbindung an JTable, JList, Primärschlüssel verstecken Java Basics - Anfänger-Themen 4
M JList Event Java Basics - Anfänger-Themen 5
M JList Index selektieren ausschalten. Java Basics - Anfänger-Themen 7
M ArrayList<int[]> - Problem mit JList! Java Basics - Anfänger-Themen 27
M JList + ListModel Java Basics - Anfänger-Themen 26
T alle Ordner in einem Ordner in JList anzeigen Java Basics - Anfänger-Themen 3
R .Jpg anzeigen lassen nach klick in JList Java Basics - Anfänger-Themen 11
F Hilfe! JList Inhalte vertauschen Java Basics - Anfänger-Themen 2
A Eintrag einer JLIST speichern Java Basics - Anfänger-Themen 3
A Anordnung von JList Elementen Java Basics - Anfänger-Themen 3
B JList wird nach Ändern weiß Java Basics - Anfänger-Themen 11
B Einträge im JList einfügen Java Basics - Anfänger-Themen 9
S JList mit icons UND strings für Dialogbox Java Basics - Anfänger-Themen 2
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
DStrohma Index einer markierten Zeile aus einer JList bekommen? Java Basics - Anfänger-Themen 5
P JList in JPanel anzeigen Java Basics - Anfänger-Themen 2
hdi Synchronisation zwischen JList und ListModel Java Basics - Anfänger-Themen 6
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
G Elemente aus jList entferne. Java Basics - Anfänger-Themen 2
G JList updaten Java Basics - Anfänger-Themen 7
K jList scrollPane Java Basics - Anfänger-Themen 2
7 Java Swing: Wie JScrollPane zur JList hinzufügen? Java Basics - Anfänger-Themen 12
K JList verschiebt sich Java Basics - Anfänger-Themen 7
G String in JList Java Basics - Anfänger-Themen 11
T Jlist Object hinzufügen Java Basics - Anfänger-Themen 2
B Auslesen der JList Java Basics - Anfänger-Themen 11
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
M Dateien in einem Ordner, JList Java Basics - Anfänger-Themen 7
G JList größe verändert sich Java Basics - Anfänger-Themen 2
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
C jList - Zeile Markieren - jList.setSelectedIndex(wert); Java Basics - Anfänger-Themen 3
G JList mit LinkedList füllen Java Basics - Anfänger-Themen 2
G JList Mehrfachselektion Java Basics - Anfänger-Themen 6
N 2 spaltige JList, mit dynamischen Inhalt Java Basics - Anfänger-Themen 4
P JList mit setListData(<Vector>) Java Basics - Anfänger-Themen 7
J GUI mit JList Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben