简体   繁体   English

如何在Kryonet中注册Enum类?

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

I am trying to register my classes in order to send information over a network. 我正在尝试注册我的课程,以便通过网络发送信息。 I need to register an Enum class that looks like this: 我需要注册一个看起来像这样的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;
    }
}

I am trying to send my entire game board over a network, which is requiring me to register all of the subclasses contained inside of my Board. 我试图通过网络发送我的整个游戏板,这要求我注册我的董事会内部的所有子类。 The main issue is that II get stuck when trying to register my enum. 主要问题是II在尝试注册我的枚举时卡住了。

This is what I am doing in my networking class: 这就是我在网络课中所做的事情:

    // 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);
    }

When I try to register Fort.class I get a bunch of errors that look like this: 当我尝试注册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)

Am I registering my enum incorrectly? 我是否错误地注册了我的枚举? Any ideas on how I can do this properly? 关于如何正确地做到这一点的任何想法?

Thanks! 谢谢!

I haven't actually worked with enums in kryo, but since their values can be pretty much simplified to a number (ordinal), you can write your own serializer that will do just that. 我实际上并没有使用kryo中的枚举,但由于它们的值可以简化为数字(序数),因此您可以编写自己的序列化程序来完成此操作。 I'll however look into that, it would be nice if it worked out of the box. 然而,我会调查一下,如果它开箱即用,那就太好了。 Btw. 顺便说一句。 that stack trace is not of much use without the first line on which it says what exception was thrown. 如果没有第一行,它表示抛出了什么异常,那么堆栈跟踪没什么用处。

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

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