【发布时间】:2012-05-09 06:05:39
【问题描述】:
所以我有一个名为 MainControl 的类,它是从另一个类(主类)运行的,我确信它只运行一次。在 MainControl 内部,我有一些必须加载的东西,其中之一是填充 HashMap 的函数,其中键设置为键绑定 (int),值设置为保存特定键绑定函数信息的类(关键细节)。
所以要填充哈希图,它需要经过 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;
}
【问题讨论】:
-
也许你可以发布一些你的代码,而不是用你自己的话描述它?
-
不显示您的实际代码,这里没有人可以帮助您。
-
@Brian:除了 Jon Skeet。
-
类Details的定义在哪里?删除具有 HashMap.put() 的行也会删除唯一使用 Details 类的行。这暗示它可能包含问题。
-
扩展@Grilse 评论-如果该行发生了某些事情,那是因为
Details类的构造函数导致了它。我的猜测是......你正在实例化另一个MindControl对象并导致无限递归。
标签: java loops random infinite