in android,private static final class can not be accessible, how to slove it,thanks.
errMsg=[java.lang.Class<com.badlogic.gdx.ai.btree.BehaviorTree$GuardEvaluator> is not accessible from java.lang.Class<com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy$2>].
As the class is another open source ,we can not modify it, so please help us how to slove it,thanks.
in android run exception, but run normally in linux server
09-05 20:22:04.935 13947 14630 E DMService-run: guardEvaluator (com.badlogic.gdx.ai.btree.BehaviorTree)], stackTrace=[com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy$2.newInstance(DefaultInstantiatorStrategy.java:89) com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1202) com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:163) com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:122) com.esotericsoftware.kryo.Kryo.readObjectOrNull(Kryo.java:847) com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:132) com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:129) com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:877) ];
kryo.setInstantiatorStrategy(new DefaultInstantiatorStrategy(new StdInstantiatorStrategy())); --- can not work
kryo.setInstantiatorStrategy(new StdInstantiatorStrategy()); -- seems work normally
can i use like this ?
@kevinkwok326: Yes, you can use StdInstantiatorStrategy directly.
Can you please provide the complete stacktrace you get when you use new DefaultInstantiatorStrategy(new StdInstantiatorStrategy())? Because this should also work. Errors should be caught and the fallback strategy applied.
@kevinkwok326: Yes, you can use
StdInstantiatorStrategydirectly.Can you please provide the complete stacktrace you get when you use
new DefaultInstantiatorStrategy(new StdInstantiatorStrategy())? Because this should also work. Errors should be caught and the fallback strategy applied.
09-05 20:22:04.935 13947 14630 E DMService-run: |uncaughtException: com.esotericsoftware.kryo.KryoException, Error constructing instance of class: com.badlogic.gdx.ai.btree.BehaviorTree$GuardEvaluator 09-05 20:22:04.935 13947 14630 E DMService-run: Serialization trace: 09-05 20:22:04.935 13947 14630 E DMService-run: guardEvaluator (com.badlogic.gdx.ai.btree.BehaviorTree), error Trace; class=[com.esotericsoftware.kryo.KryoException], errMsg=[Error constructing instance of class: com.badlogic.gdx.ai.btree.BehaviorTree$GuardEvaluator 09-05 20:22:04.935 13947 14630 E DMService-run: Serialization trace: 09-05 20:22:04.935 13947 14630 E DMService-run: guardEvaluator (com.badlogic.gdx.ai.btree.BehaviorTree)], stackTrace=[com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy$2.newInstance(DefaultInstantiatorStrategy.java:89) com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1202) com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:163) com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:122) com.esotericsoftware.kryo.Kryo.readObjectOrNull(Kryo.java:847) com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:132) com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:129) com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:877) ]; class=[java.lang.IllegalAccessException], errMsg=[java.lang.Class<com.badlogic.gdx.ai.btree.BehaviorTree$GuardEvaluator> is not accessible from java.lang.Class<com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy$2>], stackTrace=[com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy$2.newInstance(DefaultInstantiatorStrategy.java:89) com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1202) com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:163) com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:122) com.esotericsoftware.kryo.Kryo.readObjectOrNull(Kryo.java:847) com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:132) com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:129) com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:877) ]
As I check the DefaultInstantiatorStrategy.java code.
If raised exception at line 89, can not go to fallbackStrategy(ling 96~115)
Thanks for the info! I see, the fallback is never applied when the error happens inside the anonymous ObjectInstantiator. We need another fallback logic inside the instantiator, or wrap it with a fallback.
Thanks for the info! I see, the fallback is never applied when the error happens inside the anonymous
ObjectInstantiator. We need another fallback logic inside the instantiator, or wrap it with a fallback.
Thanks for reply, when will it be fixed?
I don't have much time to work on Kryo at the moment, so probably not very soon. You can always create a PR though.