2014-03-29 82 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。如果沒有第一行說明引發了什麼異常,堆棧跟蹤就沒有多大用處。