# StackOverflowError



## xcaver (7. Jan 2013)

hey ich hab ein Problem beim Starten meiner Anwendung...
wenn ich mein Programm starten möchte kommt im Applet immer applet nicht initialisiert und in der konsole steht :

java.lang.StackOverflowError
	at java.security.AccessController.checkPermission(AccessController.java:530)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at java.lang.SecurityManager.checkSystemClipboardAccess(SecurityManager.java:1394)
	at java.awt.TextComponent.checkSystemClipboardAccess(TextComponent.java:735)
	at java.awt.TextComponent.<init>(TextComponent.java:140)
	at java.awt.TextField.<init>(TextField.java:201)
	at java.awt.TextField.<init>(TextField.java:154)
	at NumberField.<init>(NumberField.java:12)
	at Spiel.<init>(Spiel.java:15)
	at Konto.<init>(Konto.java:9)
	at Spiel.<init>(Spiel.java:21)
	at Konto.<init>(Konto.java:9)

....
woran könnte das liegen ??


----------



## VfL_Freak (7. Jan 2013)

Moin,

ganz platt gesagt: vermutlich an Deinem Code .....

Vielleicht postest Dumal die entsprechenden Stellen ...

Gruß
Klaus


----------



## SlaterB (7. Jan 2013)

> at Konto.<init>(Konto.java:9)
> at Spiel.<init>(Spiel.java:21)
> at Konto.<init>(Konto.java:9)

Konto Zeile 9 erzeugt ein Spiel-Objekt, dieses erzeugt in Zeile 21 ein Konto, dieses wieder ein Spiel usw., bis in alle schöne Ewigkeit,
wenn nicht der Stack dazwischenfunkt,

etwas tricky ist immer, dass letztlich ganz oben kurz vor dem Überlauf eine völlig andere Methode den Fehler bringen kann,
die Erzeugung des NumberField usw. geht auch gerne mal 10 Methoden und mehr in die Tiefe,
an sich kein Problem, kein Fehler, hier gerade das überlaufende Fass,


----------



## xcaver (7. Jan 2013)

Ich habe mein Fehler glaube ich gefunden verstehe aber nicht genau warum ...
ich habe eine klasse Konto 
public class Konto extends Spiel {

  public int Einsatz;
  public int Konto;

  public int getEinsatz() {
    return Einsatz ;
  }

  public int getKonto() {
    return Konto;
  }

  public void setKonto(int Konto) {
    this.Konto = Konto;
  }}

und eine weiter Klasse namens Spiel.
wo die init und so drin is ... wenn ich jetzt aus der klasse konto die stele "extends Spiel" raus nehme kann ich die anwendung starten aber wenn ich es drinne habe kommt mein Fehler...
warum das??
xcaver


----------



## Timothy Truckle (7. Jan 2013)

xcaver hat gesagt.:


> wenn ich jetzt aus der klasse konto die stele "extends Spiel" raus nehme kann ich die anwendung starten aber wenn ich es drinne habe kommt mein Fehler...
> warum das??


Weil in Spiel ein 
	
	
	
	





```
new Konto()
```
 steht, woduch dann auch ein Spiel erstellt wird, weil Konto ja ein Spiel ist...

bye
TT


----------



## Firephoenix (7. Jan 2013)

Vermutlich der Fehler hier:

```
public class A {

    public A(){
	new B();
    }
    
    public static void main(String[] args) {
	new A();
    }
}
```


```
public class B extends A{

}
```

Da B von A erbt, wird bei jedem Konstruktoraufruf von B auch der Konstruktor von A aufgerufen, der ruft wieder den von B auf usw. 

Und wenn du extends mal ließt als "ist eine speziellere Form von", gilt dann
Konto ist eine speziellere Form von Spiel?

Eher sowas wie Konto ist ein Bestandteil von Spiel, dafür brauchts aber keine Vererbung.

Alternativbeispiel:
BMW extends Auto.
BMW ist eine speziellere Form von einem Auto.
aber nicht:
Reifen extends Auto, denn:
Reifen ist eine speziellere Form von einem Auto -> stimmt nicht.

Gruß


----------



## SlaterB (7. Jan 2013)

nebenbei:
großgeschriebene Variablen/ Attribute sind generell schlimm,
sie genau wie die Klasse zu nennen ist aber besonders schlimm

und wenn es schon eine Klasse Konto gibt, sollten zudem alle Variablen die 'konto' oder ähnlich heißen (gastkonto) auch von der Klasse Konto sein,
int-Variablen benenne dann anders, saldo z.B., stand, guthaben, kontostand sei gnädigerweise auch noch erlaubt


----------



## xcaver (7. Jan 2013)

=D danke für die vielen und schnellen antworten habs jetzt gelöst 
xcaver


----------

