如何在Kryonet中注册Enum类



我想注册我的类,以便通过网络发送信息。我需要注册一个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;
    }
}

我正试图通过网络发送我的整个游戏板,这要求我注册我的板中包含的所有子类。主要问题是,当我试图注册我的enum时,我卡住了。

这就是我在网络课上所做的:

    // 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中的enum,但是由于它们的值可以简化为数字(序数),因此您可以编写自己的序列化器来完成此工作。不过,我会研究一下,如果它能在盒子里工作就好了。顺便说一句。如果没有第一行说明抛出了什么异常,那么堆栈跟踪就没有多大用处。

相关内容

  • 没有找到相关文章

最新更新