[英]HashMap.put causing an infinite loop in Java
所以我有一個名為MainControl的類,它從另一個類(主要的)運行,我確定只運行一次。 在MainControl中我有一些必須加載的東西,其中一個是用鍵設置為keybind(int)來填充HashMap的函數,以及設置為保存特定keybinds函數信息的類的值(KeyDetails)。
因此,要填充哈希映射,它將經歷2個循環,第一個循環遍歷函數列表,第二個是檢查密鑰是否應該綁定到函數。 如果第二個循環發現它應該被綁定,它將運行Keybinds.put(KeyCode,new Details(Function,KeyCode,KeyName,false);(只需忽略false)。
由於某種原因,它最終強制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;
}
您的Details
類是一個 MainControl
; 它是一個子類。
擴展類時,子類的構造函數正在調用父對象的無參數構造函數,這會導致無限遞歸。
編輯以添加以下評論:您的“違規行”是:
Keybinds.put(KeyVal, new Details(FunctionStringList[i], KeyVal, Key, false));
當Details
構造函數執行時,它然后調用MainControl()
...然后調用LoadSession()
...然后創建一個新的Details
...然后調用MainControl()
.. etc等。無限遞歸直到你得到堆棧溢出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.