Compiler-Fehler StackOverFlow

Pahiti78

Mitglied
Hallo zusammen.
der folgende Code soll ein Panel generieren, auf welchen sich Textfelder und ein Button befinden. Die Textfelder werden durch eine For Schleife erzeugt und in eine ArrayListe gespeichert. Die ArrayListe wird dann an eine Methode getUmsatz() übergeben, welche die Werte aufnimmt. Die Methode soll dann die Stringwerte in Integerwerte casten und eine neue IntegerListe zurückgeben. Per Knopfdruck soll mir die Liste mit Integerwerten ausgegeben werden. Leide kommt es zur Fehlermeldung.
"Exception in thread "main" java.lang.StackOverflowError"

Vielleicht kann mir jemand helfen?

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class test {
test s=new test();
JButton buttonBerechne;
JTextField ergebnis=new JTextField();
JTextField textUmsatz=new JTextField("0,00",6);
ArrayList<JTextField> textFieldUmsatzListe=new ArrayList<>();	
ArrayList<Integer>intUmsatzListe=new ArrayList<>();

	public static void main(String args[]){
	test t=new test();
	t.los();
	}
	ArrayList<JTextField> los(){
	JFrame frame=new JFrame("BWA Monatsübersicht");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setBackground(Color.LIGHT_GRAY);
	JButton buttonBerechne=new JButton("Berechne");
	
	JPanel panelTabelle=new JPanel();
	JPanel panelUmsatz=new JPanel();
	JPanel panelKosten=new JPanel();
	panelTabelle.add(panelUmsatz);
	panelTabelle.add(panelKosten);
	buttonBerechne.addActionListener(new RechnerListener());
	ArrayList<JTextField> textFieldUmsatzListe=new ArrayList<>();
	for (int i=1;i<4;i++){
		textUmsatz=new JTextField("0,00",6);
		textFieldUmsatzListe.add(textUmsatz);
		panelUmsatz.add(textUmsatz);
		}
	panelTabelle.setLayout(new BoxLayout(panelTabelle,BoxLayout.PAGE_AXIS));
	frame.getContentPane().add(BorderLayout.CENTER, panelTabelle);
	frame.getContentPane().add(BorderLayout.NORTH, buttonBerechne);
	frame.getContentPane().add(BorderLayout.SOUTH, ergebnis);
	frame.setSize(200, 200);
	frame.setVisible(true);
	return textFieldUmsatzListe;	
}

	ArrayList<Integer> getUmsatz(ArrayList<JTextField> Liste){

	for(int i=1;i<4;i++){
		intUmsatzListe.add(i, Integer.parseInt(textUmsatz.getText()));
		
	}
	return intUmsatzListe;
	}
class RechnerListener implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent arg0) {
		
		// TODO Auto-generated method stub
	for (int i=0;i<12;i++){	
	System.out.println(s.getUmsatz(textFieldUmsatzListe));
	}
	}
}
}
 

MR_UNIX

Bekanntes Mitglied
Die Fehlersuche würde der Community (und damit auch mir) leichter fallen, wenn du den kompletten Stacktrace mit Zeilennummern mit posten würdest. So müssen wir raten, in welcher Zeile dein StackOverflow auftritt. Na gut, man kann es sicher auch so herausfinden, aber du solltest schon so gut wie möglich Infos bereitstellen.
 

MR_UNIX

Bekanntes Mitglied
Ich habe deinen Code mal schnell in ein Runnable geschmissen und online ausgeführt, der Fehler war dann doch recht schnell klar und lässt auf grundlegende Verständnisprobleme schließen.

In deinem Code steht (Ausschnitt):
Java:
class test {
...
test s = new test()
...
}

Das, was aber dort oben steht wo du eben dieses Objekt vom Typ "test" erstellst, passiert im Konstruktor. Das, was du da aber aufrufst, ist ebenfalls der Konstruktor. Du hast also im Prinzip das Thema der Rekursion entdeckt, aber ungewollt. Dein Konstruktor ruft sich immer wieder selbst auf und hört nie damit auf. Das knallt dann.
 

MR_UNIX

Bekanntes Mitglied
Entweder dort oder einfach in der Main() Methode, die ist ja statisch, da passiert dann nicht so schnell ein derartiges Unglück ;)
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben