Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kryonet--如何在类中注册类?_Java_Serialization_Network Programming_Kryonet - Fatal编程技术网

Java Kryonet--如何在类中注册类?

Java Kryonet--如何在类中注册类?,java,serialization,network-programming,kryonet,Java,Serialization,Network Programming,Kryonet,我有以下课程: public class QueryResults { protected Set<String> resultList = new HashSet<String>(); protected long executionTime = 0; public long getExecutionTime() { return executionTime; } [...] } 如果我显式调用register.RegisterCla

我有以下课程:

public class QueryResults {
    protected Set<String> resultList = new HashSet<String>();
    protected long executionTime = 0;

    public long getExecutionTime() { return executionTime; }
    [...]
}
如果我显式调用
register.RegisterClass(这是HashSet.class),一切都很顺利。然而,一旦我们开始使用许多类型的容器实现更高级的类,这可能会很烦人

我做错什么了吗?

使用:

公共类查询结果{
@CollectionSerializer.BindCollection(
elementClass=QueryResults.class,
elementSerializer=DefaultSerializers.StringSerializer.class)
受保护的集合resultList=new HashSet();
...
}

还要检查一组。

您正在使用哪个kryo版本?使用
kryonet 2.21
在您的kryo实例中使用哪个序列化策略?如果您的pojo不是有效的bean(没有getter和setter),BeanSerializer可能会导致失败,而JavaSerializer需要一个可序列化的pojo。请尝试使用我的anwser中的代码片段。我想这不是每个收集字段都可以使用的选项,但它可能有助于调查。我还没有机会在我的场景中尝试这一点,但悬赏即将到期,所以我将继续,并将其奖励给您的答案。本周晚些时候,我会尝试用我的结果来回应。
Registrar.RegisterClass(this, QueryResults.class);
------------
public class Registrar {
    public static void RegisterClass(Node n, Class theClass) {
        Map<String, Node> nodeMap = Node.getNodeMap();
        for (Map.Entry<String, Node> node : nodeMap.entrySet()) {
            if (node.getKey().equals(n.getHostname())) {
                Log.info("Registering " + theClass.getSimpleName() + " for " + node.getValue().getHostname());
                node.getValue().getServer().getConnection().getKryo().register(theClass);
                node.getValue().getClient().getConnection().getKryo().register(theClass);
            }
        }
    }
}
Exception in thread "Server" com.esotericsoftware.kryo.KryoException:
java.lang.IllegalArgumentException: Class is not registered: java.util.HashSet

Note: To register this class use: kryo.register(java.util.HashSet.class);
public class QueryResults {

    @CollectionSerializer.BindCollection(
         elementClass = QueryResults.class,
         elementSerializer = DefaultSerializers.StringSerializer.class) 
    protected Set<String> resultList = new HashSet<String>();

    ...
}