2014-03-29 38 views
3

我正在尝试注册我的课程,以便通过网络发送信息。我需要注册一个枚举类,它看起来是这样的:如何在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; 
    } 
} 

我想送我的整个游戏板在网络上,这是需要我去注册所有包含我局内部的子类。主要的问题是我试图注册我的枚举时卡住了。

这是我在我的网络课程是做:

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

上午我注册我的枚举不正确?关于我如何正确地做到这一点的任何想法?

谢谢!

+0

它看起来像一个Kryo问题。这是[Kryo项目](https://github.com/EsotericSoftware/kryo)页面。 –

+0

我一直在看,但我无法找到关于枚举的任何信息!我不能成为唯一的这个问题 – Sarah

回答

0

我实际上并没有在kryo中使用枚举,但由于它们的值可以简化为数字(有序),所以您可以编写自己的序列化程序来完成此操作。不过,我会研究一下,如果开箱即用,这将是一件好事。 Btw。如果没有第一行说明引发了什么异常,堆栈跟踪就没有多大用处。