Java停止代码执行?

时间:2014-12-23 03:49:34

标签: java if-statement dead-code

我这里有一小段代码,当有人在TeamSpeak中切换频道时会调用它。 clid是用户的ID,cid是渠道ID。整数lobbyverified是预设ID,代表比赛大厅'和'名称已验证'渠道和regVector个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语句仅用于调试目的。当我将频道切换到大厅时(我可以验证由于调试语句传递了正确的clidcid)它可以正常工作,但是当我加入名称验证频道时(再一次) ,适当的参数在这里)没有任何反应..根本。方法顶部的println语句运行,但if块之间的{{1}}语句不运行,因此在我看来,有些东西阻止它超过第一个块,即使它&# 39;没有被运行。任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

如果"已验证"正在印刷但是" test01"因此,程序必须停留在if(reg.contains(clid)) reg.remove(clid);内的无限循环中。如果reg是你的班级,请调试它;如果它是集合类,请确保您没有不正确地同时修改它。

答案 1 :(得分:0)

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