Klassisches Problem:
habe 2 ArrayListen - eine neue und eine alte. In der neuen werden zyklisch neue Parameter eingelesen. Wenn neue Parameter reingelesen werden zieht das einen Rattenschwanz an Aktionen hinterher. Deshalb möchte ich die Paramter, die sich in meiner neuen Array gesammelt in ein altes übergeben.
Das macht es auch, nur mit dem Nachteil, dass beim nächsten zyklischen Umlauf wieder alles leer ist. Ich denke mir es hat etwas mit der Variablendeklaration. Das habe ich noch immer nicht so ganz unter Kontrolle.
Code:
public class Transportmittel {
private ArrayList kurseAlt;
habe 2 ArrayListen - eine neue und eine alte. In der neuen werden zyklisch neue Parameter eingelesen. Wenn neue Parameter reingelesen werden zieht das einen Rattenschwanz an Aktionen hinterher
das Problem ist viel komplizierter als ich erst annahm.
Alle 15 Sekunden wird kurs.aktiveTransportmittel() aufgerufen.
Code:
class AutoTFKurs implements ActionListener {
public void actionPerformed(ActionEvent event) {
//Methodenaufruf alle 15 Sekunden
Transportmittel kurs = new Transportmittel();
kurs.aktiveTransportmittel();
if (kurs.getKurseNeu().equals(kurs.getKurseAlt())) {
//keine Veränderung
}
else {
kurs.kurseFiltern();
System.out.println(kurs.getGefilterteKurse());
}
}
}
Das hat zur Folge:
Code:
public class Transportmittel {
private ArrayList kurseNeu = new ArrayList();;
private ArrayList kurseAlt = new ArrayList();
private ArrayList fahrtnummer = new ArrayList();
private ArrayList Zug_ID = new ArrayList();
public Transportmittel() {
}
public void aktiveTransportmittel() {
try {
MainProgram.DBANSCon.rs = MainProgram.DBANSCon.stmt.executeQuery(
"select kurs_id, fahrtnummer " +
"from tagesfahrplan t, tf_status s, jf_kurs k " +
"where (gueltig_am = '" + MainProgram.Datum.getAktuellesDatum() + "') " +
"and (t.tagesfahrplan_id = s.tagesfahrplan_id) " +
"and ((status = 1) or (status = 2)) " +
"and (k.kurs_id = s.kurs_id)");
while (MainProgram.DBANSCon.rs.next()) {
kurseNeu.add(MainProgram.DBANSCon.rs.getString("kurs_id"));
fahrtnummer.add(MainProgram.DBANSCon.rs.getString("fahrtnummer"));
}
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
public ArrayList getKurseNeu() {
return kurseNeu;
}
public ArrayList getKurseAlt() {
return kurseAlt;
}
Mein Plan:
Wenn ich es schaffen würde die Parameter aus kurseNeu in kurseAlt zu übergeben, in der Form, dass diese nach wiederholtem Aufruf (15s) noch immer in kursAlt vorhanden sind, dann hätte ich gewonnen.
Aber:
Indem ich alle 15s das Objekt kurs neu erschaffe ist dies nicht möglich (glaub ich). Aber wie soll ich es sonst machen????
ich möchte in eine arrayliste sämtliche parameter speichern. diese gespeicherten parameter möchte ich dann vergleichen, ob diese sich geändert haben.
also zwei arraylisten. wenn die parameterliste der beiden arraylisten nicht gleich sind, so führt das programm sehr viel code aus. andernfalls wird der vorgang unterbrochen.
das heißt eine arrayliste wird alle 15 sekunden neu befüllt - dessen prameter an eine zweite arrayliste übergeben. wenn nach 15 sekunden die neue arrayliste bermals neu befüllt wird, so kann diese mit den vorherigen parameter verglichen werden.
der haken daran ist: alle 15 sec. wird das objekt kurs neu erstellt und so meine einträge aus den arraylisten gelöscht (glaub ich).
richtig, mit parameter meine ich listeneinträge. wie meinst du das. wie soll das mit einem listener funktionieren? ich stehe echt auf der leitung. danke.
Anstatt eine ArrayList zu benutzten erstellst du eine Klasse die ArrayList erweitert.
Dazu ein Listener Interface mit der Methode valueChanged oder so.
Alle Objekte die sich für Änderungen in der Liste interessieren registrieren sich auf dieser als Listener.
Wenn sich dann ein Wert in der Liste ändert ruft die Liste fireValueChanged auf und teilt so allen Listenern mit
was sich geändert hat.
danke für dein bemühen. aber leider bin ich kein so ausgepuffter programmierer, damit ich das verstehe. ein 'interface' kenn ichzwar von der theorie her, habe aber noch keines gemacht (nur als beispiel).