![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Gast
Beiträge: n/a
|
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() { ... } } |
|
|
|
Nach oben #3 |
|
Gast
Beiträge: n/a
|
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()); } } } |
|
|
|
Nach oben #4 |
|
Projektleiter
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
|
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();
Code:
public class ÄndernButtonEmpfänger implements ActionListener {
Oberfläche ob;
__________________
Patrick Gotthardts Weblog. |
|
|
|
|
|
Nach oben #5 |
|
Gast
Beiträge: n/a
|
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: |
|
|
|
Nach oben #6 |
|
Projektleiter
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
|
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. |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|