繁体   English   中英

如何在Kryonet中注册Enum类?

[英]How to register an Enum class in Kryonet?

我正在尝试注册我的课程,以便通过网络发送信息。 我需要注册一个看起来像这样的Enum类:

public enum Fort{
    NOFORT("No Fort", 0, 0), TOWER("Tower", 1, 1), KEEP("Keep", 2, 2), CASTLE("Castle", 3, 3), CITADEL("Citadel", 4, 4);

    protected int combatValue;
    protected int income;
    protected String name;

    private Fort(String n, int c, int i){
        name = n;
        combatValue = c;
        income = i;
    }

    public int getFortIncome(){
        return income;
    }
    public int getComatValue(){
        return combatValue;
    }
}

我试图通过网络发送我的整个游戏板,这要求我注册我的董事会内部的所有子类。 主要问题是II在尝试注册我的枚举时卡住了。

这就是我在网络课中所做的事情:

    // tell Kryo what things it's going to have to send
    private void registerClasses(Kryo kryo) {
        kryo.register(Request.class);
        kryo.register(PacketMessage.class);

        kryo.register(Fort.class);
        kryo.register(ArrayList.class);
        kryo.register(Tile.class);
        kryo.register(Board.class);
    }

当我尝试注册Fort.class时,我得到一堆看起来像这样的错误:

        at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)
        at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
        at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
        at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)
        at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
        at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
        at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)

我是否错误地注册了我的枚举? 关于如何正确地做到这一点的任何想法?

谢谢!

我实际上并没有使用kryo中的枚举,但由于它们的值可以简化为数字(序数),因此您可以编写自己的序列化程序来完成此操作。 然而,我会调查一下,如果它开箱即用,那就太好了。 顺便说一句。 如果没有第一行,它表示抛出了什么异常,那么堆栈跟踪没什么用处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM