gpt4 book ai didi

java - Kryonet RMI 抛出异常 => 循环 (StackOverflowError)

转载 作者:行者123 更新时间:2023-11-30 03:04:32 26 4
gpt4 key购买 nike

我们使用 Kryonet 通过 RMI 调用服务器方法。如果服务返回正常值(如 true/false),则说明工作正常。

但是当服务抛出异常时,我们会陷入无限循环,导致服务器上出现 StackOverflowError。

Exception in thread "Server" java.lang.StackOverflowError
at com.esotericsoftware.kryo.Kryo.getRegistration(Kryo.java:472)
at com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:97)
at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:517)
at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:76)
at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:518)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:552)
at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80)
at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:518)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:552)
at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80)
at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:518)

服务:

public class AuthServiceImpl extends BaseServiceImpl implements AuthService {

public boolean checkLogin(String username, String password) throws Exception {
// ...
throw new Exception("Test");
}

}

调用客户:

Boolean state = null;
try {
state = service.checkLogin("Test", "password");
} catch (Exception e) {
// Login Faild
// ...
}
return state;

所有类都在 kryo 中注册。

  • 服务
  • 异常(exception)
  • 类型

Kryonet 不能通过 RMI 处理异常吗?

最佳答案

您可能遇到一个异常,其原因引用了自身。

如果您无法处理此原因,则应在初始化 KryoSerialization 时启用引用。

Kryo kryo = new Kryo();
kryo.setReferences(true);
KryoSerialization serialization = new KryoSerialization(kryo);

Server server = new Server(16384, 2048, serialization);

关于java - Kryonet RMI 抛出异常 => 循环 (StackOverflowError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com