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:
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:
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
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");
}}
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