OOP Endlose Erstellung eines Objekts

java-frage

Mitglied
Hallo,
ich bin Schüler und an einer Hausaufgabe stehe ich vor einem Problem, für das ich auch nach Googeln keine Lösung finde.
Das Programm "Start" mit der main-Methode erstellt ein Objekt von "Steuerung".

Java:
public class start {
  
  public static void main(String[] args) {
    Steuerung ste1 = new Steuerung();
  } // end of main
  
} // end of class start

Im Konstruktor von Steuerung wird nun u. a. auch ein Objekt von der Oberflächenklasse "Gui" erstellt.

Java:
public class Steuerung {
  
  // Anfang Attribute
  
  //Referenzattribute
  private Gui meineGui;
  private Fussgaengerampel fga;
  private Autoampel aa;
  // Ende Attribute
  
  //Kontruktor
  public Steuerung() {
    this.meineGui = new Gui("Ampel");
    this.fga = new Fussgaengerampel();
    this.aa = new Autoampel();
    meineGui.setAmpelVisible(false, "a", "rot");
  }
  // Anfang Methoden
  
  // Ende Methoden
} // end of Steuerung

In der Klasse "Gui" ist dann eben das ganze weitere an Komponenten usw. (also ziemlich viel Code, aber eher nicht von Bedeutung nehme ich an.)

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class Gui extends JFrame {
  // Anfang Attribute
  private JPanel jPanel1 = new JPanel(null, true);
  private JPanel jPanel13 = new JPanel(null, true);
  private JPanel frot1 = new JPanel(null, true);
  private JPanel fgruen1 = new JPanel(null, true);
  private JPanel frot2 = new JPanel(null, true);
  private JPanel fgruen2 = new JPanel(null, true);
  private JPanel arot1 = new JPanel(null, true);
  private JPanel agelb1 = new JPanel(null, true);
  private JPanel agruen1 = new JPanel(null, true);
  private JPanel arot2 = new JPanel(null, true);
  private JPanel agelb2 = new JPanel(null, true);
  private JPanel agruen2 = new JPanel(null, true);
  private JPanel jPanel14 = new JPanel(null, true);
  private JButton jButton1 = new JButton();
  private JButton jButton2 = new JButton();
  private JButton jButton3 = new JButton();
  private JButton jButton4 = new JButton();
  //Referenzattribute
  //private Steuerung ste;
  // Ende Attribute
  
  public Gui(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 500; 
    int frameHeight = 500;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    cp.setBackground(Color.BLACK);
    jPanel1.setBounds(0, 165, 500, 125);
    jPanel1.setOpaque(true);
    jPanel1.setBackground(Color.GRAY);
    cp.add(jPanel1);
    frot1.setBounds(225, 60, 25, 25);
    frot1.setOpaque(true);
    frot1.setBackground(Color.RED);
    cp.add(frot1);
    fgruen1.setBounds(225, 95, 25, 25);
    fgruen1.setOpaque(true);
    fgruen1.setBackground(Color.GREEN);
    cp.add(fgruen1);
    frot2.setBounds(350, 330, 25, 25);
    frot2.setOpaque(true);
    frot2.setBackground(Color.RED);
    cp.add(frot2);
    fgruen2.setBounds(350, 365, 25, 25);
    fgruen2.setOpaque(true);
    fgruen2.setBackground(Color.GREEN);
    cp.add(fgruen2);
    arot1.setBounds(370, 120, 33, 33);
    arot1.setOpaque(true);
    arot1.setBackground(Color.RED);
    cp.add(arot1);
    agelb1.setBounds(418, 120, 33, 33);
    agelb1.setOpaque(true);
    agelb1.setBackground(Color.YELLOW);
    cp.add(agelb1);
    agruen1.setBounds(464, 120, 33, 33);
    agruen1.setOpaque(true);
    agruen1.setBackground(Color.GREEN);
    cp.add(agruen1);
    arot2.setBounds(160, 304, 33, 33);
    arot2.setOpaque(true);
    arot2.setBackground(Color.RED);
    arot2.setEnabled(true);
    arot2.setVisible(true);
    cp.add(arot2);
    agelb2.setBounds(112, 304, 33, 33);
    agelb2.setOpaque(true);
    agelb2.setBackground(Color.YELLOW);
    cp.add(agelb2);
    agruen2.setBounds(64, 304, 33, 33);
    agruen2.setOpaque(true);
    agruen2.setBackground(Color.GREEN);
    cp.add(agruen2);
    jPanel13.setBounds(340, 0, 9, 125);
    jPanel13.setOpaque(true);
    jPanel13.setBackground(new Color(0xC0C0C0));
    jPanel1.add(jPanel13);
    jPanel14.setBounds(260, 0, 9, 125);
    jPanel14.setOpaque(true);
    jPanel14.setBackground(new Color(0xC0C0C0));
    jPanel1.add(jPanel14);
    jButton1.setBounds(8, 8, 105, 33);
    jButton1.setText("Grünphase");
    jButton1.setMargin(new Insets(2, 2, 2, 2));
    jButton1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(jButton1);
    jButton2.setBounds(8, 56, 105, 33);
    jButton2.setText("Gelbphase");
    jButton2.setMargin(new Insets(2, 2, 2, 2));
    jButton2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton2_ActionPerformed(evt);
      }
    });
    cp.add(jButton2);
    jButton3.setBounds(225, 128, 25, 25);
    jButton3.setText("X");
    jButton3.setMargin(new Insets(2, 2, 2, 2));
    jButton3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton3_ActionPerformed(evt);
      }
    });
    jButton3.setBackground(new Color(0xC0C0C0));
    cp.add(jButton3);
    jButton4.setBounds(350, 296, 25, 25);
    jButton4.setText("X");
    jButton4.setMargin(new Insets(2, 2, 2, 2));
    jButton4.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton4_ActionPerformed(evt);
      }
    });
    jButton4.setBackground(new Color(0xC0C0C0));
    cp.add(jButton4);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public Gui
  
  // Anfang Methoden
  public void jButton1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jButton1_ActionPerformed
  
  public void jButton2_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jButton2_ActionPerformed
  
  public void jButton3_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jButton3_ActionPerformed
  
  public void jButton4_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jButton4_ActionPerformed
  
  public void setAmpelVisible(boolean status, String f_a, String f) {
    if (f_a=="a") {
      //autoampel
      if (f=="rot") {
        //rot
        this.arot1.setVisible(status);
        this.arot2.setVisible(status);
      } else {
        //gelb/gruen
        if (f=="gruen") {
          //gruen
          this.agruen1.setVisible(status);
          this.agruen2.setVisible(status);
        } else {
          //gelb
          this.agelb1.setVisible(status);
          this.agelb2.setVisible(status);
        }  
      }
    } else {
      //fussgaengerampel
      if (f=="rot") {
        //rot
        this.frot1.setVisible(status);
        this.frot2.setVisible(status);
      } else {
        //gruen
        this.fgruen1.setVisible(status);
        this.fgruen2.setVisible(status);
      }
    }
  }
  // Ende Methoden
  
  public static void main(String[] args) {
    new Gui("Gui");
  } // end of main
  
} // end of class Gui

Die Klassen Fussgaengerampel und Autoampel habe ich hier mal außen vor gelassen, weil das für mich nach einem reinen OOP-Problem aussieht.
Also: Was kann man dagegen machen, dass beim Ausführen unendlich viele Oberflächen auftauchen? Warum werden mehrere Objekte erstellt?
Ich wäre sehr dankbar für Hilfe. Ich komme an dieser Stelle leider absolut nicht weiter.

LG
 
Hallo,

ich konnte den Fehler aus dem Quellcode nicht rauslesen, aber ich vermute mal, dass irgendein Objekt, das von Steuerung erstellt wird, den Konstruktor von Steuerung erneut aufruft und damit sich selbst auch wieder. Solche Fehler behebt man am besten, indem man im Konstruktor von Steuerung einen Breakpoint setzt und bei jedem Befehl Step-Into wählt und schaut, was da alles aufgerufen wird. Wenn dann irgendwo [c]new Steuerung()[/c] steht, dann hast du eine endlose Schleife.

Als kurzes Beispiel:
Java:
class A {
  B b;
  public A() {
    b = new B();
  }
}
class B {
  A a;
  public B() {
    a = new A();
  }
}
PS: Ich würd dir empfehlen, deutlichere Bezeichner für die Variablen zu verwenden. Ich weiß, dass man sich in selbstgeschriebenem Quellcode meistens problemlos zurecht findet, aber wenn man den Code zwei Wochen liegen lässt, weiß man kaum noch, was man da geschrieben hat 😉
 
Zuletzt bearbeitet:
Tatsächlich kommen die Wiederholungen nur zu Stande, wenn das Objekt von Gui erstellt wird. Lässt man es weg, was natürlich nicht die Lösung ist, wird eine Konsolenausgabe im Konstruktor nur einmal ausgeführt. Hast du da zufällig noch eine Idee, was man an der Klasse Gui ändern müsste?

Ich danke dir jedenfalls schon mal sehr!!! 🙂
 
Deine Gui Klasse hat noch eine main(), die du aber eigentlich nicht brauchst. In dem gesamten Programm sollte es nur eine Klasse geben, die eine main() besitzt. Aber ich kann mir nicht vorstellen, warum sie sich selbst ständig aufrufen sollte. Aber trotzdem versuch mal, sie weg zu lassen, da die Hauptklasse sowieso die Klasse start sein sollte.
 
Java:
if (f_a=="a") {
      //autoampel
      if (f=="rot") {
Das wird wohl sehr oft gar nicht funktionieren. Strings vergleicht man mittels equals().
 
Ein Problem habe ich da noch. Wenn ich auf einen Button klicke, kommt diese seltsame Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Gui.jButton1_ActionPerformed(Gui.java:149)
at Gui$1.actionPerformed(Gui.java:108)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:19
95)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
a:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242
)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6297)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6062)
at java.awt.Container.processEvent(Container.java:2039)
at java.awt.Component.dispatchEventImpl(Component.java:4660)
at java.awt.Container.dispatchEventImpl(Container.java:2097)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575
)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
at java.awt.Container.dispatchEventImpl(Container.java:2083)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:627)
at java.awt.EventQueue$2.run(EventQueue.java:625)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
ntrolContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
ntrolContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:641)
at java.awt.EventQueue$3.run(EventQueue.java:639)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
ntrolContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:638)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Kannst du oder jemand anderes was damit anfangen?
 
nein, das war nicht der Aktuelle. Das hier ist er:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class Gui extends JFrame {
  // Anfang Attribute
  private JPanel jPanel1 = new JPanel(null, true);
  private JPanel jPanel13 = new JPanel(null, true);
  private JPanel frot1 = new JPanel(null, true);
  private JPanel fgruen1 = new JPanel(null, true);
  private JPanel frot2 = new JPanel(null, true);
  private JPanel fgruen2 = new JPanel(null, true);
  private JPanel arot1 = new JPanel(null, true);
  private JPanel agelb1 = new JPanel(null, true);
  private JPanel agruen1 = new JPanel(null, true);
  private JPanel arot2 = new JPanel(null, true);
  private JPanel agelb2 = new JPanel(null, true);
  private JPanel agruen2 = new JPanel(null, true);
  private JPanel jPanel14 = new JPanel(null, true);
  private JButton jButton1 = new JButton();
  private JButton jButton2 = new JButton();
  private JButton jButton3 = new JButton();
  private JButton jButton4 = new JButton();
  //Referenzattribute
  private Steuerung ste1;
  // Ende Attribute
  
  public Gui(String title) { 
    // Frame-Initialisierung
    
    super(title);
    //ste1 = new Steuerung();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 500; 
    int frameHeight = 500;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    cp.setBackground(Color.BLACK);
    jPanel1.setBounds(0, 165, 500, 125);
    jPanel1.setOpaque(true);
    jPanel1.setBackground(Color.GRAY);
    cp.add(jPanel1);
    frot1.setBounds(225, 60, 25, 25);
    frot1.setOpaque(true);
    frot1.setBackground(Color.RED);
    cp.add(frot1);
    fgruen1.setBounds(225, 95, 25, 25);
    fgruen1.setOpaque(true);
    fgruen1.setBackground(Color.GREEN);
    cp.add(fgruen1);
    frot2.setBounds(350, 330, 25, 25);
    frot2.setOpaque(true);
    frot2.setBackground(Color.RED);
    cp.add(frot2);
    fgruen2.setBounds(350, 365, 25, 25);
    fgruen2.setOpaque(true);
    fgruen2.setBackground(Color.GREEN);
    cp.add(fgruen2);
    arot1.setBounds(370, 120, 33, 33);
    arot1.setOpaque(true);
    arot1.setBackground(Color.RED);
    cp.add(arot1);
    agelb1.setBounds(418, 120, 33, 33);
    agelb1.setOpaque(true);
    agelb1.setBackground(Color.YELLOW);
    cp.add(agelb1);
    agruen1.setBounds(464, 120, 33, 33);
    agruen1.setOpaque(true);
    agruen1.setBackground(Color.GREEN);
    cp.add(agruen1);
    arot2.setBounds(160, 304, 33, 33);
    arot2.setOpaque(true);
    arot2.setBackground(Color.RED);
    arot2.setEnabled(true);
    arot2.setVisible(true);
    cp.add(arot2);
    agelb2.setBounds(112, 304, 33, 33);
    agelb2.setOpaque(true);
    agelb2.setBackground(Color.YELLOW);
    cp.add(agelb2);
    agruen2.setBounds(64, 304, 33, 33);
    agruen2.setOpaque(true);
    agruen2.setBackground(Color.GREEN);
    cp.add(agruen2);
    jPanel13.setBounds(340, 0, 9, 125);
    jPanel13.setOpaque(true);
    jPanel13.setBackground(new Color(0xC0C0C0));
    jPanel1.add(jPanel13);
    jPanel14.setBounds(260, 0, 9, 125);
    jPanel14.setOpaque(true);
    jPanel14.setBackground(new Color(0xC0C0C0));
    jPanel1.add(jPanel14);
    jButton1.setBounds(8, 8, 105, 33);
    jButton1.setText("Gelbphase");
    jButton1.setMargin(new Insets(2, 2, 2, 2));
    jButton1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(jButton1);
    jButton2.setBounds(8, 56, 105, 33);
    jButton2.setText("Grünphase");
    jButton2.setMargin(new Insets(2, 2, 2, 2));
    jButton2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton2_ActionPerformed(evt);
      }
    });
    cp.add(jButton2);
    jButton3.setBounds(225, 128, 25, 25);
    jButton3.setText("X");
    jButton3.setMargin(new Insets(2, 2, 2, 2));
    jButton3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton3_ActionPerformed(evt);
      }
    });
    jButton3.setBackground(new Color(0xC0C0C0));
    cp.add(jButton3);
    jButton4.setBounds(350, 296, 25, 25);
    jButton4.setText("X");
    jButton4.setMargin(new Insets(2, 2, 2, 2));
    jButton4.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton4_ActionPerformed(evt);
      }
    });
    jButton4.setBackground(new Color(0xC0C0C0));
    cp.add(jButton4);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public Gui
  
  // Anfang Methoden
  public void jButton1_ActionPerformed(ActionEvent evt) {
    //Gelbphase
    ste1.gelbphase();
  } // end of jButton1_ActionPerformed
  
  public void jButton2_ActionPerformed(ActionEvent evt) {
    ste1.autogruen();
  } // end of jButton2_ActionPerformed
  
  public void jButton3_ActionPerformed(ActionEvent evt) {
    ste1.ampelschalter();
  } // end of jButton3_ActionPerformed
  
  public void jButton4_ActionPerformed(ActionEvent evt) {
    ste1.ampelschalter();
  } // end of jButton4_ActionPerformed
  
  public void setAmpelVisible(boolean status, String f_a, String f) {
    if (f_a=="a") {
      //autoampel
      if (f=="rot") {
        //rot
        this.arot1.setVisible(status);
        this.arot2.setVisible(status);
      } else {
        //gelb/gruen
        if (f=="gruen") {
          //gruen
          this.agruen1.setVisible(status);
          this.agruen2.setVisible(status);
        } else {
          //gelb
          this.agelb1.setVisible(status);
          this.agelb2.setVisible(status);
        }  
      }
    } else {
      //fussgaengerampel
      if (f=="rot") {
        //rot
        this.frot1.setVisible(status);
        this.frot2.setVisible(status);
      } else {
        //gruen
        this.fgruen1.setVisible(status);
        this.fgruen2.setVisible(status);
      }
    }
  }
  // Ende Methoden
  
  
  
} // end of class Gui

Java:
public class start {
  
  public static void main(String[] args) {
    Steuerung ste1 = new Steuerung();
  } // end of main
  
} // end of class start

Java:
public class Steuerung {
  
  // Anfang Attribute
  
  //Referenzattribute
  private Gui gui;
  private Fussgaengerampel fga;
  private Autoampel aa;
  // Ende Attribute
  
  //Kontruktor
  public Steuerung() {
    System.out.println("111111111");
    //this.zeitphase();
    //System.out.println("222222222");
    //System.out.println("333333333");
    //this.fga = new Fussgaengerampel();
    //this.aa = new Autoampel();
    this.gui = new Gui("Ampel");
    
    //gui.setAmpelVisible(false, "a", "rot");
  }
  // Anfang Methoden
  public void fussgruen() {
    gui.setAmpelVisible(true, "f", "gruen");
    gui.setAmpelVisible(false, "f", "rot");
    
    gui.setAmpelVisible(true, "a", "rot");
    gui.setAmpelVisible(false, "a", "gelb");
    gui.setAmpelVisible(false, "a", "gruen");
    zeitphase();
  }
  
  public void autogruen() {
    gui.setAmpelVisible(true, "f", "rot");
    gui.setAmpelVisible(false, "f", "gruen");
    
    gui.setAmpelVisible(true, "a", "gruen");
    gui.setAmpelVisible(false, "a", "gelb");
    gui.setAmpelVisible(false, "a", "rot");
    zeitphase();
  }
  
  public void gelbphase() {
    gui.setAmpelVisible(true, "f", "rot");
    gui.setAmpelVisible(false, "f", "gruen");
    
    gui.setAmpelVisible(false, "a", "gruen");
    gui.setAmpelVisible(true, "a", "gelb");
    gui.setAmpelVisible(false, "a", "rot");
    zeitphase();
  }
  
  private void zeitphase() {
    int i = 1000000;
    int j = 1000000;
    int k = 1000000;
    while (!(i==0)) { 
      i--;
      while (!(j==0)) { 
        j--;
        while (!(k==0)) { 
          k--;
        } // end of while
      } // end of while
    } // end of while
  }
  
  public String getZustandAuto() {
    int integer = aa.getZustand();
    if (integer==1) {
      return "rot";
    } else {
      if (integer==2) {
        return "gelb";
      } else {
        return "gruen";
      } // end of if-else
    } // end of if-else
  }
  
  public String getZustandFussgaenger() {
    int integer = fga.getZustand();
    if (integer==1) {
      return "rot";
    } else {
      return "gruen";
    } // end of if-else
  }
  
  public void ampelschalter() {
    gelbphase();
    fussgruen();
    zeitphase();
    autogruen();
  }
}
  // Ende Methoden
 // end of Steuerung

Java:
public class Fussgaengerampel {
  
  // Anfang Attribute
  private Steuerung ste = new Steuerung();
  private int zustand;
  // Ende Attribute
  
  // Anfang Methoden
  private void setZustand(int param) {
    this.zustand = param;
  }
  public void schalten(int farbe) {
    this.setZustand(farbe);
  }
  public int getZustand() {
    return zustand;
  }

  // Ende Methoden

    // Anfang Komponenten
    // Ende Komponenten
} // end of Fussgaengerampel

Java:
public class Autoampel {
  
  // Anfang Attribute
  private Steuerung ste = new Steuerung();
  private int zustand;
  // Ende Attribute
  
  // Anfang Methoden
  private void setZustand(int param) {
    this.zustand = param;
  }
  public void schalten(int farbe) {
    this.setZustand(farbe);
  } 
  public int getZustand() {
    return zustand;
  }

  // Ende Methoden

    // Anfang Komponenten
    // Ende Komponenten
} // end of Autoampel
 
Moin,

Java:
public void jButton1_ActionPerformed(ActionEvent evt) 
{
    //Gelbphase
    ste1.gelbphase();
} // end of jButton1_ActionPerformed
So denn Code und Fehlermeldung wirklich korrelieren, dann ist hier ("ste1" == null), also nicht initialisiert!

BTW: verwende sprechende Variablennamen - glaub' mir: nach einem halben Jahr weißt auch Du nicht mehr, was genau "ste1" eigentlich sein sollte ....

Gruß
Klaus
 
Hm, klingt logisch. Aber wenn ich ste1 initiatilisiere ...
Java:
private Steuerung ste1 = new Steuerung();
... dann wird ja wieder ein Objekt von Steuerung erzeugt, welches wieder eins von der Gui erzeugt usw.
---> Endlosschleife

Wie müsste man das denn initialisieren?
 

Zurück
Oben