StackOverflowError

X

xcaver

Gast
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 ??
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

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

Vielleicht postest Dumal die entsprechenden Stellen ...

Gruß
Klaus
 
S

SlaterB

Gast
> 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,
 
X

xcaver

Gast
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
 
F

Firephoenix

Gast
Vermutlich der Fehler hier:
Java:
public class A {

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

Java:
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ß
 
S

SlaterB

Gast
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
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Oben