好吧,也許不會像這樣損壞。Red5 - SharedObject中的ArrayList被破壞
所以,一點背景。我最近將Red5動力遊戲從red5的Windows版本移到了Debian Squeeze上。我有一個遊戲大廳,它使用共享對象來維護各種可用遊戲的列表。
單個遊戲在所述SharedObject中作爲HashMap [String,Object]存儲爲它的game_id。一對夫婦HashMap中的屬性是的ArrayList,特別是玩家(一個ArrayList [整數]連接的玩家ID的)和票(另一個ArrayList的[整數]的球員誰已經提交表決)
每當我做出改變到這些的ArrayList的,什麼東西,什麼地方出了問題,我可以沒有長寫HashMap中的共享對象(的setAttribute返回false)
創建一個新的遊戲(服務器端):
HashMap<String, Object> game = new HashMap<String, Object>();
game.put("id", PendingGameManager.GAME_IDX);
game.put("difficulty", difficulty);
game.put("type", type);
game.put("description", this.getDescription(type, difficulty));
game.put("players", new ArrayList<Integer>());
game.put("coords", coords);
game.put("created", Calendar.getInstance().getTimeInMillis());
game.put("votes", new ArrayList<Integer>());
boolean success = this.gamesSO.setAttribute(Integer.toString(PendingGameManager.GAME_IDX), game);
這個執行s沒有問題,成功返回true。
後來,我檢索玩家陣列和作出修正:
HashMap<String, Object> game = (HashMap<String, Object>)this.gamesSO.getMapAttribute(Integer.toString(game_id));
ArrayList<Integer> players = (ArrayList<Integer>) game.get("players");
players.add(new Integer(Integer.parseInt((user_id))));
boolean success = this.gamesSO.setAttribute(Integer.toString(game_id), game);
這裏成功總是返回false。如果爲遊戲創建一個新的HashMap並複製每個屬性從舊的,但省略玩家和投票這是好的,但什麼嘗試,我不能讓它維護一個數組。我也嘗試過使用List和Vector來獲得相同的結果。這是我與Java的第一次接觸,我一直小心只添加Integer的類實例,而不是原始的int,但是我已經用盡了所有的想法。
在Windows上它跑完美,我使用ArrayList的[字符串]原執行的,而不是ArrayList的[整數]
環境: Debian的擠壓6.0.6 JRE 1.7 Red5的1.0RC2
任何幫助或建議將不勝感激!
什麼是'gamesSO'? –
gamesSO是[SharedObject]的一個實例(http://dl.fancycode.com/red5/api/org/red5/server/so/SharedObject.html) – milks