StackOverflowError

Status
Nicht offen für weitere Antworten.
S

Speed

Gast
Hallo,
in einer größeren Anwendung mit vielen Buttons und Grafik konnte ich erfolgreich kompilieren
aber nach dem Programmstart erhalte ich die Fehlermeldung:

"Exeption in thread "main" javalang.StackOverflowError"

Um hier nicht den gesamten Code abbilden zu müssen reduzierte ich das Programm auf möglichst
wenige Zeilen. Der Fehler entsteht dann, wenn ich in der Klasse "Steuerung"
ein Objekt der Klasse GUI erstelle (siehe Kommentar dort). Da ich in der Funktion main()
schon ein Objekt der Klasse GUI erstellt habe darf ich offenbar dies in der Klasse
"Steuerung" nicht tun. Wie soll ich aber dann von der Klasse "Steuerung" auf eine Methode in der Klasse GUI zugreifen?
Kann mir jemand helfen?

Gruß

Speed

***************************************************
***************************************************
Code:
public class PGMTest  {

 static public void main(String[] args)  {

   GUI gui = new GUI();
 }

}

****************************************************
****************************************************

import java.awt.*;
import java.awt.event.*;


public class GUI extends Frame {


 private Button butn1;  

  public GUI() {
   
   setLayout( null );

   butn1 = new Button("Button 1");
 
   add( butn1 ); 

   butn1.setBounds( 10, 600, 80, 30 ); 

   Steuerung B1 = new Steuerung(Steuerung.BUTTON1);

   butn1.addActionListener(B1);
                             
   setSize(1000,600);

   show();
  
  }

  public void paint(Graphics g)  {

    super.paint(g);

            
  }

  public void test()  {

  // funktion nur zum testen

  }

}

***********************************************
***********************************************

import java.awt.*;
import java.awt.event.*;

class Steuerung implements ActionListener  {
 
  static final byte BUTTON1 = 1;

  byte id;
   
  public GUI gu;   

 
   public Steuerung(byte id)  {
  
    this.id = id;

    gu = new GUI();   //*** Mit dieser Codezeile entsteht der Fehler *** 
 
  }

  public void actionPerformed(ActionEvent e)  {

   switch(id)  {
  
     case BUTTON1:
      System.out.println("in Button 1");
      gu.test();           // **** das klappt dann natürlich auch nicht, ich muß aber auf methoden der klasse
                             // **  GUI zugreifen.
    
     break;
  }

 }


}
 

bummerland

Top Contributor
1. Bitte Code-Tags verwenden.

2. Im Konstruktor deiner Klasse GUI legst du ein neues Steuerung-Objekt an. Im Konstruktor der Klasse Steuerung legst du widerum ein neues GUI-Objekt an. Nun hast du praktisch ne Endlosschleife. Es werden so lange neue Objekte angelegt, bis der Stack überläuft. Ist klar, wieso?
Übergib doch einfach im Konstruktor der Klasse Steuerung das GUI Objekt, dann brauchst du es nicht noch einmal anlegen. Quasi so:
Code:
public class GUI extends Frame {

   //...

   public GUI() {
   
   //...

   Steuerung B1 = new Steuerung(Steuerung.BUTTON1, this);
   //...
   }

    //...

}

//***********************************************
//***********************************************

import java.awt.*;
import java.awt.event.*;

class Steuerung implements ActionListener  {

    GUI gu;
    //...

   public Steuerung(byte id,GUI gui)  {
 
    this.id = id;

    gu = gui;   //*** Mit dieser Codezeile entsteht der Fehler ***

  }

    //...

}
 
S

Speed

Gast
Hallo becstift,
allerbesten Dank für Deine schnelle Bearbeitung meines Anliegens. Dein Vorschlag war goldrichtig und nun funktioniert
alles bestens :). Ist mir fast etwas peinlich aber als ehemaliger C-Programmierer habe ich noch so meine Probleme mit Objekten. Das mit der Endlosschleife ist mir natürlich im nachhinein klar.

Dank und Gruß

Speed
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben