Java 停止代码执行



我这里有一小段代码,当有人在TeamSpeak中切换频道时,就会调用它。 clid是用户的 ID,cid是频道 ID。 整数lobbyverified是代表"锦标赛大厅"和"姓名验证"频道的预设 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语句仅用于调试目的。 当我将通道切换到大厅时(我可以验证由于调试语句而传入了正确的clidcid(,它工作正常,但是当我加入名称验证通道时(再次,正确的参数在这里(什么也没发生。.完全。 方法顶部的 println 语句运行,但if块之间的语句没有运行,所以在我看来,似乎有什么东西阻止它通过第一个块,即使它没有运行。 任何帮助将不胜感激。 谢谢!

如果正在打印"已验证"但未打印"test01",则程序必须卡在if(reg.contains(clid)) reg.remove(clid);内部的无限循环中。如果 reg 属于您的类,请对其进行调试;如果它属于集合类,请确保未不正确地同时修改它。

您应该使用调试器逐步完成此操作。 我的猜测是,对 clientPoke(( 的调用阻止了对某些网络资源的等待。

相关内容

  • 没有找到相关文章

最新更新