Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Desktop-Applikationen und Grafik > java.lang.StackOverflowError
Antwort
 
Themen-Optionen
Alt 14.10.2005, 00:08   Nach oben    #1
lokl
Gast
 
Beiträge: n/a
Standard java.lang.StackOverflowError

Hallo Leute, ich hab mal wieder ein Problem mit meinem Proggi. Ich bekomme ein StackOverFlowError wegen meinem Button-Listener. Ich benutze mehre Listener auf die gleich weise, und die funktionieren ohne Probleme. Auch wenn ich die Methode in eine extra Klasse mache, macht es keine Probleme. Deshalb verstehe ich nicht, warum es hier zum Fehler kommt.

Wäre euch sehr Dankbar, wenn mir jemand helfen könnte




Hier die Fehlermeldung:

java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)

at sun.awt.Win32GraphicsConfig.getBounds(Win32Graphic sConfig.java:295)

at java.awt.Window.init(Window.java:284)

at java.awt.Window.<init>(Window.java:31

at java.awt.Frame.<init>(Frame.java:419)

at java.awt.Frame.<init>(Frame.java:384)

at BeschreibungsFrame.<init>(BeschreibungsFrame.java:

at MausEmpfänger.<init>(MausEmpfänger.java:11)

at Oberfläche.<init>(Oberfläche.java:12)

at ÄndernButtonEmpfänger.<init>(ÄndernButtonEmpfänger .java:9)

at Oberfläche.<init>(Oberfläche.java:13)

at ÄndernButtonEmpfänger.<init>(ÄndernButtonEmpfänger .java:9)

at Oberfläche.<init>(Oberfläche.java:13)

at ÄndernButtonEmpfänger.<init>(ÄndernButtonEmpfänger .java:9)

at Oberfläche.<init>(Oberfläche.java:13)

at ÄndernButtonEmpfänger.<init>(ÄndernButtonEmpfänger .java:9)



Quellcode:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.*;
public class Oberfläche extends Applet
{
DropDownEmpfänger dde = new DropDownEmpfänger(this);
MausEmpfänger me = new MausEmpfänger(this);
ÄndernButtonEmpfänger anBuEm = new ÄndernButtonEmpfänger(this);
Graphics g;
Choice auswahl = new Choice();
DbConnect m = DbConnect.initiate();
Statement test = m.SqlRueckgabe();
ResultSet rs;//, rs2; //
FontMetrics fm;
private String vorgänger, nachfolger;
Button Knopf1 = new Button("Einfügen");
Button Knopf2 = new Button("Löschen");
Button Knopf3 = new Button("Ändern");


public void init()
{
setSize(1200,800);
//System.out.println(anzahlWorkFlows());

// Knopf1.setVisible(true);
Knopf1.addActionListener(anBuEm);
Knopf2.addActionListener(anBuEm);
Knopf3.addActionListener(anBuEm);

add(Knopf1);
add(Knopf2);
add(Knopf3);

for (int i = 1;i < anzahlWorkFlows()+1;i++)
{
auswahl.addItem(Integer.toString(i));
}

auswahl.addItemListener(dde);
add(auswahl);
g = getGraphics();
this.addMouseListener(me);

}

public void paint(Graphics g)
{
auswahl.setLocation(110,30);
Knopf1.setBounds(990,30,63,23);
Knopf2.setBounds(1060,30,63,23);
Knopf3.setBounds(1130,30,63,23);
fm = getFontMetrics(getFont());

}



private int anzahlWorkFlows()
{
...
}

}
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.10.2005, 08:09   Nach oben    #2
LordOfCodes
Gast
 
Beiträge: n/a
Standard

Hi

Kannst du noch den Code der Klasse ÄndernButtonEmpfänger posten?
Sehr wahrscheinlich wird dort Oberfläche.init aufgerufen.

StackOverflowError bedeutet, dass zu viele Methoden sich gegenseitig aufgerufen haben.

Greets
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.10.2005, 10:47   Nach oben    #3
lokl
Gast
 
Beiträge: n/a
Standard

Also meinem Verständnis nach, macht diese Klasse eigentlich noch nix, ich habe alle Funktionen, die einen Fehler verursachen könnten rausgenommen.
Was wäre denn das Problem, wenn hier Oberfläche.init aufgerufen würde?
Oder macht es das automatisch, wenn man das Objekt erstellt?:confused:
Aber warum funktioniert es dann bei den anderen Listenern, die alle eigentlich gleich mache?

Merci.



import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;

public class ÄndernButtonEmpfänger implements ActionListener {

Oberfläche ob = new Oberfläche();


ÄndernButtonEmpfänger(Oberfläche ob)
{
this.ob = ob;
}

public void actionPerformed(ActionEvent e)
{

if (e.getSource() == ob.Knopf1)
{

ob.g.drawString("hallo",100,300);
}
if (e.getSource() == ob.Knopf2)
{

ob.g.drawString("hallo2",100,320);
}
if (e.getSource() == ob.Knopf3)
{
System.out.println(e.getSource().toString());
System.out.println(e.toString());

}

}




}
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.10.2005, 10:59   Nach oben    #4
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.083
Standard

Es ist wahrscheinlich eine sehr bescheidene Idee, das Layout der Buttons in der paint-Methode zu verändern. Wesentlich falscher kann man es schon gar nicht mehr machen.

Außerdem kannst du dir folgendes sparen:
Code:
public class ÄndernButtonEmpfänger implements ActionListener {

Oberfläche ob = new Oberfläche();
und wie folgt schreiben:
Code:
public class ÄndernButtonEmpfänger implements ActionListener {

Oberfläche ob;
Ansonsten wäre es nett, wenn du in Zukunft den BBCode "code", bzw "php" verwenden könntest, um Programmcode zu posten - ist einfach besser zu lesen.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.10.2005, 12:33   Nach oben    #5
lokl
Gast
 
Beiträge: n/a
Standard

Coole Sache, hat geklappt mit dem new... weglassen. Bin gestern abend echt verzweifelt und hab den Fehler nicht gesehen. Vielen Dank!

Aber zu dem Layout hatte ich da noch ne Frage. Wieso soll man sie nicht in der paint methode änder? Oder wie sollte man es besser machen? Und warum?
Wahrscheinlich sind diese Fragen ziemlich dumm, aber ich hab nicht allzu viel Erfahrung mit Java, von daher sehe ich das Problem nicht wirklich.:confused:
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.10.2005, 13:04   Nach oben    #6
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.083
Standard

Layout übernimmt normalerweise ein LayoutManager - solltest du mal im Java Tutorial nachlesen.

Und wenn du schon absolute Positionierung verwenden willst, dann solltest du das im Konstruktor erledigen - die Paint-Methode wird so oft aufgerufen, dass das auf die Dauer ein ziemlicher Performance-Fresser ist.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:06 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44