当试图将对象写入json com.badlogic.gdx.utils.Json
(基于jsonbeans)时,我得到StackOverflowError
。除了对ShapeRenderer的引用外,它引用的对象和所有对象只包含像float,boolean,int等基本变量。多个对象都引用相同的ShapeRenderer。有一些循环引用(对象都相互引用),但我认为它应该能够处理。Libgdx JsonWriter StackOverflowError
这些错误的原因是什么?循环引用了问题吗?我不能简单地删除它们,而无需返回到绘图板并重新构建应用程序的主要部分。
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.StackOverflowError
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: java.lang.StackOverflowError
at java.util.regex.Pattern$CharProperty$1.isSatisfiedBy(Unknown Source)
at java.util.regex.Pattern$7.isSatisfiedBy(Unknown Source)
at java.util.regex.Pattern$7.isSatisfiedBy(Unknown Source)
at java.util.regex.Pattern$7.isSatisfiedBy(Unknown Source)
at java.util.regex.Pattern$7.isSatisfiedBy(Unknown Source)
at java.util.regex.Pattern$CharProperty.match(Unknown Source)
at java.util.regex.Pattern$Curly.match0(Unknown Source)
at java.util.regex.Pattern$Curly.match(Unknown Source)
at java.util.regex.Pattern$CharProperty.match(Unknown Source)
at java.util.regex.Matcher.match(Unknown Source)
at java.util.regex.Matcher.matches(Unknown Source)
at com.badlogic.gdx.utils.JsonWriter$OutputType.quoteName(JsonWriter.java:174)
at com.badlogic.gdx.utils.JsonWriter.name(JsonWriter.java:46)
at com.badlogic.gdx.utils.JsonWriter.set(JsonWriter.java:113)
at com.badlogic.gdx.utils.Json.writeType(Json.java:574)
at com.badlogic.gdx.utils.Json.writeObjectStart(Json.java:533)
at com.badlogic.gdx.utils.Json.writeValue(Json.java:491)
at com.badlogic.gdx.utils.Json.writeFields(Json.java:237)
at com.badlogic.gdx.utils.Json.writeValue(Json.java:492)
at com.badlogic.gdx.utils.Json.writeFields(Json.java:237)
at com.badlogic.gdx.utils.Json.writeValue(Json.java:492)
at com.badlogic.gdx.utils.Json.writeFields(Json.java:237)
at com.badlogic.gdx.utils.Json.writeValue(Json.java:492)
at com.badlogic.gdx.utils.Json.writeFields(Json.java:237)
这正好为约1024行:
at com.badlogic.gdx.utils.Json.writeValue(Json.java:492)
at com.badlogic.gdx.utils.Json.writeFields(Json.java:237)
不知道这是否是日志限制或堆栈限制,我想第一个。
你可以试着将你想写入的值修剪成一个小例子吗?您可能能够找出具体问题。我怀疑一个循环引用的小例子将揭露这个问题... –
我删除了所有循环引用和对ShapeRenderer的所有引用。我将shaperenderer传递给需要渲染每个帧的对象的渲染函数,以及需要时用于直接从父对象获取的其他一些变量。现在JSON作家和读者工作,但我仍然不知道为什么它不会很好地循环引用。它不会很难被发现,只需存储每个唯一实例的一个副本,并通过ID引用其余的实例... – Hatagashira