My first block of code is my Item Object file; the second is the Main Class. Before there was not any issues with the code running but after I had added a read and write file my code had started to receive a stack flow error. just the snippet of which the error is being called.
public class Item implements java.io.Serializable {
public static String name;
public static double price;
public static double amount;
public int max = 1;
SlayerProgram sp = new SlayerProgram();
ReadFile rf = new ReadFile();
public Item(String name, double price,double amount )
{
this.name = name;
this.price = price;
this.amount = amount;
}
public void ItemSet(String name, double price,double amount)
{
this.name = name;
this.price = price;
this.amount = amount
}
My Main class:
public class SlayerProgram {
//import file txts, and Item Class
static String name;
static double price;
static double amount;
Item item = new Item(name,price,amount);
ReadFile rf = new ReadFile();
static String fileNameText = "D:\\Game\\SlayerProgram\\Name.txt";
static String filePriceInt = "D:\\Game\\SlayerProgram\\Price.txt";
static String fileAmountInt ="D:\\Game\\SlayerProgram\\Amount.txt";
//begin file Read
public void BeginText() throws IOException
{
TextFile();
}
public void Max()
{
item.Max();
}
//declare needed Data Types;
final int max = item.max;
ArrayList<String> Name = new ArrayList<>();
ArrayList<Double> Price = new ArrayList<>();
double size = Price.size();
ArrayList<Double> Amount = new ArrayList<>();
Exception in thread "main" java.lang.StackOverflowError
at slayerprogram.Item.<init>(Item.java:18)
at slayerprogram.SlayerProgram.<init>(SlayerProgram.java:25)
at slayerprogram.Item.<init>(Item.java:18)
at slayerprogram.SlayerProgram.<init>(SlayerProgram.java:25)
How can I find where the stack overflow is being caused?
Item
createsSlayerProgram
:And
SlayerProgram
createsItem
And therefore on initialization you will create those objects endlessly
There's a similar Baeldung example for getting StackOverflowError
Because there is a
circular
dependency betweenItem
andSlayerProgram
class. You have createdItem item = new Item(name,price,amount);
in classSlayerProgram
andSlayerProgram sp = new SlayerProgram();
in classItem
. So when you try to create the object ofItem
it will try to create the object ofSlayerProgram
and thenSlayerProgram
try to create the object ofItem
and it goes on still themethod stack is not full
and leads toStackOverflow
.