我这里有一小段代码,当有人在TeamSpeak中切换频道时会调用它。 clid
是用户的ID,cid
是渠道ID。整数lobby
和verified
是预设ID,代表比赛大厅'和'名称已验证'渠道和reg
是Vector
个ID,用于确定大厅中的人员。在此函数之外对reg
的唯一其他引用是它的声明和初始化。这是代码:
public void handleClientMove(int clid, int cid)
{
String name = query.getClientNameFromID(clid);
System.out.println(cid == lobby ? "lobby" : cid == verified ? "verified" : "non-tournament");
if(cid == lobby)
{
System.out.println("Handling Tournament Lobby");
if(!reg.contains(clid))
{
query.clientPoke(clid, "Welcome to the Tourney! Please change your name to include your rank. ex: 'D5 Name', 'M1 Name2'");
reg.add(clid);
}
}
else
{
if(reg.contains(clid)) reg.remove(clid);
}
System.out.println("test01");
if(cid == verified)
{
System.out.println("Handling Name Verified");
if(!isUserRegistered(clid))
{
participants.add(new Player(name, clid, true));
query.clientPoke(clid, "Your name has been verified and you are now entered in the tournament!");
}
}
}
println
语句仅用于调试目的。当我将频道切换到大厅时(我可以验证由于调试语句传递了正确的clid
和cid
)它可以正常工作,但是当我加入名称验证频道时(再一次) ,适当的参数在这里)没有任何反应..根本。方法顶部的println
语句运行,但if
块之间的{{1}}语句不运行,因此在我看来,有些东西阻止它超过第一个块,即使它&# 39;没有被运行。任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
如果"已验证"正在印刷但是" test01"因此,程序必须停留在if(reg.contains(clid)) reg.remove(clid);
内的无限循环中。如果reg是你的班级,请调试它;如果它是集合类,请确保您没有不正确地同时修改它。
答案 1 :(得分:0)
您应该使用调试器逐步完成此操作。我的猜测是对clientPoke()的调用阻塞了某些网络资源的等待。