jsonbeans을 기반으로하는 com.badlogic.gdx.utils.Json
을 사용하여 json에 개체를 쓰려고 할 때 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)
이 약 1,024 라인에 대한 계속 :
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