StackOverflowError in Java

Status
Niet open voor verdere reacties.

IgorJavaFan

Gebruiker
Lid geworden
8 jul 2009
Berichten
24
Hallo;

Ik ben bezig een verhuurprogramma te schrijven, echter krijg ik een StackOverflowError.
Ik begrijp dat dit moet duiden op een tekort aan geheugen, waarschijnlijk veroorzaakt door een oneindige lus of iets dergelijks.
Ik heb de code keer op keer nagelopen en nog niets kunnen ontdekken, heb ook nergens een herhaling of zo gebruikt.
Weet iemand waar in de code het probleem zou kunnen zitten?? Het zou in een van de methoden moeten zijn.
De foutmelding wordt aangegeven voor de regel "FietsverhuurFrame uren = new FietsverhuurFrame();"
en ook voor dezelfde regel in de GUI-klasse, waar een nieuw object gemaakt wordt vd VerhuurBeheer-klasse

Alvast heel erg bedankt voor de hulp!

Code:
import fiets.Fiets.Fietssoort;
import fietsverhuurGui.FietsverhuurFrame;

public class VerhuurBeheer {
  
  FietsverhuurFrame uren = new FietsverhuurFrame();
  

  private static final double WEEKENDFACTOR = 1.25;
  private static final double VERZEKERINGFACTOR = 2.50;
  private static final double VERSNELFACTOR = 0.4;
  private static final double KINDFACTOR = 0.8;
  private static final double STARTTARIEF = 4.0;
  private static final int basisuren = 2;
  private int aantalUur = 0;
  private double huurprijsStadsfiets = 0;
  private double huurprijsVersnelfiets = 0;
  private double huurprijsKindfiets = 0;
  private double totaleDagHuur = 0.0;
  private double totaleHuurOpbrengst = 0.0;
  private double extraUur = 1.00;
  private int stadsTeller = 0;
  private int versnelTeller = 0;
  private int kindTeller = 0;
  
  public VerhuurBeheer(){
    
  }
  /*berekent de huurprijs van een stadsfiets
   * bekijkt of de weekendfactor en de verzekeringfactor meegenomen moeten worden
   * telt, dmv een teller, het aantal verhuurde fietsen van de soort op
   * pseudo-code:
   * haal aantal uur op uit de GUI-klasse
   * als deze uren > basisuren, trek deze uren af van basisuren
   * vermenigvuldig het verschil met 1(euro)
   * tel dit bedrag op bij huurprijsStadsfiets
   * tel starttarief op bij huurprijsStadsfiets
   * als weekendfactor == true, verreken met huurprijsStadsfiets
   * als verzekeringfactor == true
   * geef aan huurprijsStadsfiets
   * vermenigvuldig huurprijsStadsfiets met aantal fietsen
   * verhoog de teller met het aantal verhuurde fietsen van de soort
   * return huurprijsStadsfiets
   */
  public double berekenHuurprijsStads(){
    Fiets stadsfiets = new Fiets(Fietssoort.STADSFIETS);
    aantalUur = Integer.parseInt(uren.aantalUurField.getText());
    if(aantalUur > basisuren){
      extraUur = aantalUur - basisuren;
      huurprijsStadsfiets = extraUur;
    }
    else{
      aantalUur = basisuren;
    }
    huurprijsStadsfiets = huurprijsStadsfiets + (STARTTARIEF);
    if(uren.weekendBox.isSelected()){
      huurprijsStadsfiets = huurprijsStadsfiets * WEEKENDFACTOR;
    }
    if(uren.verzekeringBox.isSelected()){
      huurprijsStadsfiets = huurprijsStadsfiets + (VERZEKERINGFACTOR);
    }
    huurprijsStadsfiets = huurprijsStadsfiets * Integer.parseInt(uren.aantalStadsfietsField.getText());
    stadsTeller = stadsTeller + (Integer.parseInt(uren.aantalStadsfietsField.getText()));
    return huurprijsStadsfiets;
  }
  
  /*berekent de huurprijs van een versnelfiets
   * bekijkt of de weekendfactor en de verzekeringfactor meegenomen moeten worden
   * telt, dmv een teller, het aantal verhuurde fietsen van de soort op
   * pseudo-code:
   * haal aantal uur op uit de GUI-klasse
   * als deze uren > basisuren, trek deze uren af van basisuren
   * vermenigvuldig het verschil met 1(euro)
   * tel dit bedrag op bij huurprijsVersnelfiets
   * tel starttarief op bij huurprijsVersnelfiets
   * als weekendfactor == true, verreken met huurprijsVersnelfiets
   * als verzekeringfactor == true
   * geef aan huurprijsVersnelfiets
   * vermenigvuldig huurprijsVersnelfiets met aantal fietsen
   * verhoog de teller met het aantal fietsen van de soort
   * return huurprijsVersnelfiets
   */
  public double berekenHuurprijsVersnel(){
    Fiets versnelfiets = new Fiets(Fietssoort.VERSNELFIETS);
    aantalUur = Integer.parseInt(uren.aantalUurField.getText());
    if(aantalUur > basisuren){
      extraUur = aantalUur - basisuren;
      huurprijsVersnelfiets = extraUur;
    }
    else{
      aantalUur = basisuren;
    }
    huurprijsVersnelfiets = huurprijsVersnelfiets + (STARTTARIEF);
    if(uren.weekendBox.isSelected()){
      huurprijsVersnelfiets = huurprijsVersnelfiets * WEEKENDFACTOR;
    }
    if(uren.verzekeringBox.isSelected()){
      huurprijsVersnelfiets = huurprijsVersnelfiets + (VERZEKERINGFACTOR);
    }
    huurprijsVersnelfiets = huurprijsVersnelfiets * Integer.parseInt(uren.aantalVersnelfietsField.getText());
    huurprijsVersnelfiets = huurprijsVersnelfiets * VERSNELFACTOR;
    versnelTeller = versnelTeller + (Integer.parseInt(uren.aantalVersnelfietsField.getText()));
    return huurprijsVersnelfiets;
  }
  
  /*berekent de huurprijs van een kinderfiets
   * bekijkt of de weekendfactor en de verzekeringfactor meegenomen moeten worden
   * telt, dmv een teller, het aantal verhuurde fietsen van de soort op
   * pseudo-code:
   * haal aantal uur op uit de GUI-klasse
   * als deze uren > basisuren, trek deze uren af van basisuren
   * vermenigvuldig het verschil met 1(euro)
   * tel dit bedrag op bij huurprijsKindfiets
   * tel starttarief op bij huurprijsKindfiets
   * als weekendfactor == true, verreken met huurprijsKindfiets
   * als verzekeringfactor == true
   * geef aan huurprijsKindfiets
   * vermenigvuldig huurprijsKindfiets met aantal fietsen
   * verhoog de teller met het aantal fietsen van de soort
   * return huurprijsKindfiets
   */
  
  public double berekenHuurprijsKind(){
    Fiets kindfiets = new Fiets(Fietssoort.KINDFIETS);
    aantalUur = Integer.parseInt(uren.aantalUurField.getText());
    if(aantalUur > basisuren){
      extraUur = aantalUur - basisuren;
      huurprijsKindfiets = extraUur;
    }
    else{
      aantalUur = basisuren;
    }
    huurprijsKindfiets = huurprijsKindfiets + (STARTTARIEF);
    if(uren.weekendBox.isSelected()){
      huurprijsKindfiets = huurprijsKindfiets * WEEKENDFACTOR;
    }
    if(uren.verzekeringBox.isSelected()){
      huurprijsKindfiets = huurprijsKindfiets + (VERZEKERINGFACTOR);
    }
    huurprijsKindfiets = huurprijsKindfiets * Integer.parseInt(uren.aantalKindfietsField.getText());
    huurprijsKindfiets = huurprijsKindfiets * KINDFACTOR;
    kindTeller = kindTeller + (Integer.parseInt(uren.aantalKindfietsField.getText()));
    return huurprijsKindfiets;
  }
  
  /* geeft het aantal verhuurde stadsfietsen
   */
  public int getAantalStadsfietsen(){
    return stadsTeller;
  }
  /* geeft het aantal verhuurde versnellingsfietsen
   */
  public int getAantalVersnelfietsen(){
   return versnelTeller; 
  }
  /* geeft het aantal verhuurde kinderfietsen
   */
  public int getAantalKindfietsen(){
    return kindTeller;
  }
  /* geeft de totale huur van de dag
   */
  
  public double getdagHuur(){
    totaleDagHuur = huurprijsStadsfiets + (huurprijsVersnelfiets + huurprijsKindfiets);
    return totaleDagHuur;
  }
  
  /* geeft de totale huuropbrengst
   */
  public double getTotaleHuurOpbrengst(){
    totaleHuurOpbrengst = totaleHuurOpbrengst + totaleDagHuur;
    return totaleHuurOpbrengst;
  }
 
Laatst bewerkt door een moderator:
ik zie niet onmiddelijk het probleem maar de code
import fietsverhuurGui.FietsverhuurFrame; is niet aanwezig

aanvullend kan je ook
import fiets.Fiets.Fietssoort;
new Fiets meegeven maar naar de vraag die je steld vermoed ik dat het
import fietsverhuurGui.FietsverhuurFrame; moet zijn.

kan je ook de error steak meegeven??
ziet er uit als nulpointerexeception
 
StackOverflowError

Hi,

Bedankt voor je reactie!
Ben r achter gekomen dat de fout zat in het, zowel in de GUI als in de VerhuurBeheer klasse, aanmaken van een associatie dmv new.
Hierdoor ontstond er een oneindige lus, waardoor de stackOverflow ontstond.
Dus de ene klasse maakte een nieuw object vd andere klasse, die op zijn beurt weer een object maakte van de ene klasse, enz enz.
Weer wat wijzer geworden dus!

In ieder geval bedankt voor de hulp!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan