所以我有一個名爲MainControl的類從另一個類(主要的)運行,我確定只運行一次。 MainControl內部我有幾件事情必須加載,其中之一是一個函數,該函數使用設置爲keybind(int)的密鑰填充HashMap,並將值設置爲保存特定keybinds函數信息的類(KeyDetails)。HashMap.put在Java中導致無限循環
所以要填充散列圖,它會經歷2個循環,第一個循環遍歷函數列表,第二個循環遍歷函數列表,第二個檢查鍵是否應該綁定到函數。如果第二個循環發現它應該被綁定,它將運行Keybinds.put(KeyCode,新的細節(函數,KeyCode,KeyName,假);(只是忽略該假)
由於某種原因它最終強制MainControl ();當它到達Keybinds.put時再次運行...沒有任何理由,沒有任何函數可以使MainControl運行,並且它在我刪除Keybinds.put行時起作用,只需刪除那條單行作品
public MainControl()
{
System.out.println("Starting System");
LoadSession("Default");
System.out.println("Ended System - Never Reached");
}
public static void LoadSession(String s)
{
Keybinds = new HashMap();
for (int i = 0; i < FunctionStringList.length; i++)
{
String Key = "";
int KeyVal = 0;
try
{
for (int a = 0; a < KeyBindingList.length; a++)
{
if (KeyBindingList[a].KeyName.equalsIgnoreCase(FunctionStringList[i]))
{
Key = KeyBindingList[a].KeyName
KeyVal = KeyBindingList[a].KeyCode
}
}
Keybinds.put(KeyVal, new Details(FunctionStringList[i], KeyVal, Key, false));
System.out.println("Key: " + Key + " Val: " + KeyVal + " Hack: " + FunctionStringList[i]);
}
catch (Exception E) { E.printStackTrace(); }
}
}
public static String FunctionStringList[] =
{
"Forward", "Backwards", "StrafeLeft", "StrafeRight", "Jump", "Sneak"
};
詳細類別:
public class Details extends MainControl
{
public Details(String Name, int KeyCode, String KeyName2, boolean Bool)
{
FunctionName = Name;
Code = KeyCode;
KeyName = KeyName2 != null ? KeyName2 : "None";
State = Bool;
}
public boolean Toggle()
{
State = !State;
return State;
}
public void SendChat(String s)
{
Console.AddChat(s);
}
public String FunctionName;
public String KeyName;
public int Code;
public boolean State;
}
也許你可以發佈一些你的代碼,而不是用你自己的話來描述它? – 2012-04-28 23:27:35
沒有顯示你的*實際*代碼,這裏沒有人可以幫助你。 – 2012-04-28 23:27:49
@Brian:除了Jon Skeet。 – 2012-04-28 23:30:48