我这里有一小段代码,当有人在TeamSpeak中切换频道时,就会调用它。 clid
是用户的 ID,cid
是频道 ID。 整数lobby
和verified
是代表"锦标赛大厅"和"姓名验证"频道的预设 ID,reg
是用于确定大厅中谁的 ID Vector
。 此函数之外对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
块之间的语句没有运行,所以在我看来,似乎有什么东西阻止它通过第一个块,即使它没有运行。 任何帮助将不胜感激。 谢谢!
如果正在打印"已验证"但未打印"test01",则程序必须卡在if(reg.contains(clid)) reg.remove(clid);
内部的无限循环中。如果 reg 属于您的类,请对其进行调试;如果它属于集合类,请确保未不正确地同时修改它。
您应该使用调试器逐步完成此操作。 我的猜测是,对 clientPoke(( 的调用阻止了对某些网络资源的等待。