[Java] java.lang.StackOverflowError beim intialisieren des Arrays

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Ne0.Ka1n, 5. Mai 2008 .

Schlagworte:
  1. 5. Mai 2008
    java.lang.StackOverflowError beim intialisieren des Arrays

    moin!

    Ich arbeite gerade an einer kleinen CD-Verwaltung.. Dazu habe ich ein Array namens meineAlben erstellt und es gefüllt bzw. intialisiert, damit ich keine NullPointerException bekomme:

    Code:
    public class AlbumKonto
    {
     AlbumKonto meineAlben[] = new AlbumKonto[50];
    
    //hier sind noch die restlichen Attribute
     
     public AlbumKonto()
     {
     for(int i = 0; i <= 50; i++){
     meineAlben[i] = new AlbumKonto();
     }
     }
    
    //hier sind noch die restlichen Operationen
    
    }
    
    Wenn ich die Gui starte kommt folgende Meldung:

    Code:
    Exception in thread "main" 
    java.lang.StackOverflowError
     at AlbumKonto.<init>(AlbumKonto.java:52)
    

    Hat jemand eine Idee, wie ich diesen Fehler wegbekomme?


    thx ne0.ka1n
     
  2. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    Es darf in der Schleife nicht <= 50 sonder < 50 heißen

    sonst versuchst du auf das Element mit der Nummer 50 zuzugreifen, doch da es mit 0 beginnt geht es nur bis 49.

    so sollte es funktioniern
    Code:
    for(int i = 0; i < 50; i++)
     
  3. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    du deklarierst ein array mit 50 feldern, die haben die indizes 0-49

    du probierst aber in von 0-50 zu befüllen. Das macht 51 Felder. (die null mitzählen)

    schreib statt for(int i = 0; i <= 50; i++)
    for(int i = 0; i < 50; i++){

    dann hört er bei i=49 auf und alles ist gut
     
  4. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    funktioniert immer noch nicht...
    hab auch mal i<40 ausprobiert, aber geht auch nicht...
     
  5. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    okay, da hätten wir möchtegern checkas mal genauer hinsehen müssen
    aber <50 war schon richtig getippt von uns

    stack overflow bedeutet normalerweise das dein stack, der stapel, übelst riesig angewachsen ist. (Ich erfind jetzt einfach mal was, und behaupte das er in deinen heap oder sogar programmcode reinwächst, muss mich da mal schlau machen)

    Diese Overflows kriegt man normalerweise wenn mans mit rekursionen ein klein wenig übertreibt.

    also, wenn ich mir den code unter dem aspekt mal anguck, dann fällt mir diese Stelle auf:

    Code:
    public AlbumKonto()
     {
     for(int i = 0; i < 50; i++){
     meineAlben[i] = new AlbumKonto();
     }
     }
    public AlbumKonto() ist dein Standardkonstruktor. Das heißt für jedes mal wenn du meineAlben = new AlbumKonto(); aufrufst, wird der Konstruktor in dem neu erzeugten Objekt aufgerufen. Welches dank dem Konstruktur wieder ein neues Objekt anlegt. Das neue Objekt, legt dank des Konstrktors wieder ein neues Objekt an, und so weiter.

    hoff du hast erkannt was ich mein, wenn net sagen, dann mach ichs, oder wer anders ganz ausführlich
     
  6. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    ahh sehr gut, besten Dank. BW ist raus!!


    Habs so gelöst:

    Habe in der Fachklasse eine Operation namens Arrayfuellen gemacht :
    Code:
     public void Arrayfuellen(){
     for(int i = 0; i <50; i++){
     meineAlben[i] = new AlbumKonto();
     }
     }
    und diese in der Gui am Start ausführen lassen:
    Code:
    public VerwaltungGui(String title) {
    //.....
    AlbumKonto.Arrayfuellen();
    }
    hoffe das ist richtig... Auf jeden Fall gibt er mir keine Fehlermeldung mehr am Start der GUI an und das löschen eines Kontos im Array funktioniert.

    ABER
    beim Darstellen des Arrays in der GUI zeigt er ne NullPointerException an.

    Hier die Operationen:

    lesen in der GUI:
    Code:
     public void CDLesenButtonActionPerformed(ActionEvent evt) {
     AlbumKonto oKonto = new AlbumKonto();
     oKonto = AlbumKonto.darstellen(AlbumKonto.suchen2(Integer.parseInt(CDNummerTextfield.getText())));
     CDNummerTextfield.setText(Integer.toString(oKonto.getAlbumnr()));
     CDGenreComboBox.setSelectedItem((String)oKonto.getGenre());
     CDInterpretTextfield.setText(oKonto.getInterpret());
     CDJahrTextfield.setText(Integer.toString(oKonto.getJahr()));
     CDAnzahlTextfield.setText(Integer.toString(oKonto.getAnzahl()));
     FehlermeldungTextfield.setText("Das Album wird angezeigt"); 
    }
    ___
    Suchen in der Fachklasse:

    Code:
     public int suchen2(int oAlbumnr){
     int i=0;
     for(i=49;i>=0;i--){
     if (meineAlben[i].getAlbumnr()==oAlbumnr){
     return i;
     }
     }
     return -1;
     }
    ___
    darstellen in der Fachklasse

    Code:
     public AlbumKonto darstellen(int i){
     if(i>=0){
     return meineAlben[i];
     }
     else{
     return null;
     }
    
     }

    danke im Vorraus
    ne0.ka1n
     
  7. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    mmh, da kann ich dir grad net weiterhelfen. In Sachen GUI kenn ich mich nicht so, bis gar nicht aus.

    Ne Null Pointer Exception wird nomalerweise ausgelöst wenn du auf eine referenz, oder ein array das den wert 'null' hat zugreift.

    Also, kann es sein, das du in deinem Array ein Objekt löscht? Danach wird da nämlich 'null' drinstehen an stelle meineAlben[x]. Wenn du dann probierst darauf zuzugreifen, wird die exception ausgelöst.

    In dem Fall wärs hab ich n tipp: die Klasse ArrayList(). Das ist ein dynamisch anwachsendes Array. Ist richtig nützlich
     
  8. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    Ist schwer zu sagen wo der Fehler ist, am besten du postest mal die ganze Fehlermeldung, auch steht dort meistenst die Zeilennummer wo der Fehler aufgetreten ist - dann weiss man schon mal wo man suchen muss.

    Was mir auch noch auffällt, du rufst die public-Methoden von AlbumKonto wie statische Methoden auf. Doch sind diese laut deklaration nicht statisch.
     
  9. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    Ich glaub ich weiß, woran es liegt... das mit der ErzeugeArray-Funktion funktioniert noch nicht ganz. Wo soll die For-Schleife denn hin, außer in den Construktor?

    @net98: wie sollte die Operation denn am Besten heißen?
     
  10. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    wenn ich das in die main pack, meckern die Funktionen, dass sie das Array nicht finden können... o.0"
     
  11. 5. Mai 2008
    AW: java.lang.StackOverflowError beim intialisieren des Arrays

    am besten du machst sie statisch:

    Code:
    public static int suchen2(int oAlbumnr)
    
    und
    
    public static AlbumKonto darstellen(int i)
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.