2011-05-22 51 views
0

我在我的小遊戲中緩存某些玩家,現在在我的跑步方法中我想檢查每個緩存的人,並給他們獎勵,檢查getAllplayersOnline並檢查它們是否在某些地圖,我只是緩存了那些地圖。Java試圖獲得所有緩存

public static HashMap<Integer,MapleCharacter> fishlist = 
       new HashMap<Integer,MapleCharacter>(); 

然後我把

fishlist.put(chr.getId(), chr); 

現在在我的run方法我試過

    if(UseChairHandler.fishlist.containsKey(chr.getId())) { 
//do stuff 

,但它沒有工作...任何想法?

+0

「它沒有工作」 - 照顧詳細? – 2011-05-22 17:55:33

+0

即使我緩存,它不給我任何項目,我檢查,它的這一部分是錯誤的。 – PirateOwh 2011-05-22 18:27:47

+1

您是否驗證過'fishlist.put'行正在執行? – 2011-05-22 19:16:26

回答

0

的允許的entrySet您遍歷整個地圖

for(Map.Entry<Integer,MapleCharacter> entry:fishlist.entrySet()){ 
    //entry.value() is a MapleCharacter in the map 
} 
+0

整個地圖?這是什麼意思//entry.value()是在地圖 – PirateOwh 2011-05-22 18:25:35

+0

中的MapleCharacter之前,找出爲什麼地圖不緩存你認爲它應該的內容。是chr.getId();總是返回正確的結果? – 2011-05-22 18:43:54

0

添加更多的調試輸出。 A System.err.println(fishlist)可以創造奇蹟。 是否chr.getId()總是返回正確的ID?另外,如果您的遊戲是多線程的,如果您沒有正確同步對地圖的訪問權限,則會遇到問題。

+0

如果你能讓我成爲一個同步的方法來檢查任何人的緩存,我會愛你,並試圖學習它! – PirateOwh 2011-05-22 18:30:16

+0

對初學者使用ConcurrentHashMap – 2011-05-23 03:21:34