in einer Klasse verwende ich "ArrayList". Allerdings gibt es eine Problem: wenn ich ein Methode der Klasse aufrufe, die aus einer anderen Klasse Objekte zu der ArryList hinzufügt, scheinen diese zu verschwinden, wenn die Methode in der aufrufenden Klasse beendet wurde. Kann das sein?
Nein, kann nicht sein. Von alleine verschwindet nix aus ner Liste.
Entweder du fügst sie nicht hinzu oder du löscht sie irgendwo. Sicher dass du sie in die richtige Liste einfügst?
Soweit ich es verstanden habe, werden in einer Liste ja nur die Refenzen auf Objekte gespeichert, nicht die Datn des Objekts selbst. D.h. Wenn ein Objekt verschwindet, auf das die Liste zeigt, ist das Objekt in der Liste weg. Nur die Referenz ins Nirvana bleibt übrig, oder?
Ein Objekt kann nur dann "verschwinden" (garbage collected werden), wenn du keine Möglichkeit mehr hast, es über Referenzen zu erreichen. Ist es in einer ArrayList, hält selbige Referenzen auf das Objekt, und egal was sonst passiert, können die Objekte nicht verloren gehen, da du sie ja noch erreichen kannst.
Eventuell legst du irgendwie eine Kopie der Liste an und vernichtest diese oder du legst eine neue Liste mit gleichem Namen an, die die andere verdeckt.
@ARadauer: Ich würde das anders sehen, in C muss man nachher wieder aufräumen, in Java kann man jede Menge Müll erzeugen und muss sich nicht drum kümmern.
oder gerade keine Kopie, die Liste wird an Stelle X scheinbar gesichert, in eine Variable geschrieben
woanders verändert oder gar geleert, das wirkt sich dann auch auf X aus, weil X dieselbe Liste verwendt
es gibt die Klasse MessKurven, in der sollen verschieden Messkurven in einer ArryList gespeichert werden.
Erzeugt werden die Kurven in der GuiMain.
Dann sollen die Kurven in der Klasse Graph dargestellt werden.
Ein Test mit System.out.println zeigt, dass eine Kurve in der GuiMain erzeugt wird. Beim Aufruf von Graph zeigt sich aber, dass die ArrayList leer ist.
aus unvollständigen GUI-Programmen ist nicht viel herauszulesen,
außer dass vielleicht nicht genau dann gepaintet wird wenn du das gerne hättest, etwa genau beim repaint(),
System.out.println()-Ausgaben sind in ihrer Reihenfolge aber recht verlässlich,
bist du dir sicher dass erst etwas eingefügt wird und dann sich paint mit einer anderen Ausgabe meldet?
folgendes Programm habe ich aus deinen Bruchstücken ergänzt, geht tadellos
Java:
publicclassTest{publicstaticvoidmain(String[] args)throwsException{newGuiMain();}}classMessKurven{privateArrayList<MessKurve> kurven;privateint aktuelleKurve =0;publicMessKurven(){
kurven =newArrayList<MessKurve>();
aktuelleKurve =-1;}publicvoidadd(MessKurve m){
kurven.add(m);
aktuelleKurve = kurven.size()-1;System.out.println("Anzahl Kurven: "+(aktuelleKurve +1));}publicintsize(){return kurven.size();}}classMessKurve{}classGuiMain{publicGraphKurvendiagramm;// Variablen klein schreiben!!publicMessKurven kurven;publicGuiMain(){
kurven =newMessKurven();MessKurve m =newMessKurve();
kurven.add(m);Kurvendiagramm=newGraph();Kurvendiagramm.set(kurven);Kurvendiagramm.repaint();// in meinem Programm sinnlos, GUI noch gar nicht zu sehenJFrame f =newJFrame();
f.add(Kurvendiagramm);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(50,50);
f.setVisible(true);}}classGraphextendsJPanel{privateMessKurven messKurven;publicvoidset(MessKurven kurven){
messKurven = kurven;}@OverrideprotectedvoidpaintComponent(Graphics g){super.paintComponent(g);// original paintComponent aus JPanel aufrufenSystem.out.println("paint: "+ messKurven.size());}}