Я работаю над программой, которая представляет собой симулятор движения снаряда с пользовательским интерфейсом.Я получаю ошибку StackOverflow, и кажется, что это происходит, когда я пытаюсь создать своих слушателей действия для моих кнопок и текстовых полей.Я понимаю, что ошибка переполнения стека связана с рекурсией, которая никогда не завершается, но я не вижу в своем коде, где это происходит.
Я решил использовать потоки в своей программе, потому что отнимающие много времени действия замедляютсяпрограмма.Так что у меня есть поток, который обрабатывает все вычисления для моделирования.
Код длинный, но вот его структура.
public class SimulationGUI implements ActionListener, Runnable
{
//Create object references for window, panels, text fields, buttons, and labels.
SimulationGUI()
{
//Here I instantiate all my buttons, textfields, labels,
//and basically set up the user interface.
createListeners(); //This calls a method that creates my action listeners
}
public void actionPerformed(ActionEvent e)
{
Thread thread = new Thread(this);
thread.start(); // this calls the method run()
}
public void run()
{
//Here, I get the text for the variables
//calculations are performed for the projectile motion
//I also edit three top level text fields using .setText()
}
public void createListeners()
{
//Add action listeners for each text field
ActionListener angleList = new SimulationGUI();
angleText.addActionListener(angleList);
.....
}
public static void main(String[] args)
{
new SimulationGUI();
}
}
Полагаю, мне придется создавать и добавлять прослушиватели действий в новом потоке, но я не совсем уверен.Вот ошибки, которые я получаю:
Exception in thread "main" java.lang.StackOverflowError
at java.awt.Insets.<init>(Unknown Source)
at sun.awt.windows.WToolkit.getScreenInsets(Native Method)
at sun.awt.windows.WToolkit.getScreenInsets(Unknown Source)
at java.awt.Window.init(Unknown Source)
at java.awt.Window.<init>(Unknown Source)
at java.awt.Frame.<init>(Unknown Source)
at javax.swing.JFrame.<init>(Unknown Source)
at SimulationGUI.<init>(SimulationGUI.java:24)
at SimulationGUI.createListeners(SimulationGUI.java:211)
at SimulationGUI.<init>(SimulationGUI.java:124)
at SimulationGUI.createListeners(SimulationGUI.java:211)
at SimulationGUI.<init>(SimulationGUI.java:124)
at SimulationGUI.createListeners(SimulationGUI.java:211)
at SimulationGUI.<init>(SimulationGUI.java:124)
at SimulationGUI.createListeners(SimulationGUI.java:211)
at SimulationGUI.<init>(SimulationGUI.java:124)
at SimulationGUI.createListeners(SimulationGUI.java:211)
at SimulationGUI.<init>(SimulationGUI.java:124)
at SimulationGUI.createListeners(SimulationGUI.java:211)
at SimulationGUI.<init>(SimulationGUI.java:124)
at SimulationGUI.createListeners(SimulationGUI.java:211)
.....