Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Ошибка в логах игрового сервера
#1
Здравствуйте, уважаемые администраторы форума!
После того как забыла указать в админ панели количество нужной для выдачи клан-репутации выходит вот такая вот ошибка.
Подмечу: Когда указываю сколько выдать репутации ошибок нет и она выдается.

Неприятно такое видеть в логах. Как исправить и чем это чревато?

Код:
015/10/13 09:51:37    WARNING    20    l2n.game.handler.AdminCommandHandler    java.util.NoSuchElementException
    at java.util.StringTokenizer.nextToken(Unknown Source)
    at l2n.game.handler.admincommandhandlers.AdminPledge.useAdminCommand(AdminPledge.java:157)
    at l2n.game.handler.AdminCommandHandler.useAdminCommandHandler(AdminCommandHandler.java:220)
    at l2n.game.network.clientpackets.RequestBypassToServer.runImpl(RequestBypassToServer.java:73)
    at l2n.game.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:50)
    at l2n.commons.threading.ExecuteWrapper.execute(ExecuteWrapper.java:57)
    at l2n.commons.threading.FIFORunnableQueue.removeAndExecuteAll(FIFORunnableQueue.java:21)
    at l2n.commons.threading.FIFOExecutableQueue.run(FIFOExecutableQueue.java:81)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Ответ
#2
Исправить - добавить проверку на нужное количество параметров в хендлере AdminPledge.useAdminCommand или "сьедать" ошибку аля как тут:

Код:
else if (action.equals("addrep"))
{
        try
        {
                int rep = Integer.parseInt(st.nextToken());
                if ((target.getClan() == null) || (target.getClan().getLevel() < 5))
                {
                        activeChar.sendPacket(Msg.INVALID_TARGET);
                        return false;
                }
                target.getClan().incReputation(rep, false, "admin_manual");
                activeChar.sendMessage("Added " + rep + " clan points to clan " + target.getClan().getName() + ".");
        }
        catch (NumberFormatException nfe)
        {
                activeChar.sendMessage("Please specify a number of clan points to add.");
        }
}

Чревато - ничем.
Ответ
#3
ANZO Написал:Исправить - добавить проверку на нужное количество параметров в хендлере AdminPledge.useAdminCommand или "сьедать" ошибку аля как тут:

Код:
else if (action.equals("addrep"))
{
        try
        {
                int rep = Integer.parseInt(st.nextToken());
                if ((target.getClan() == null) || (target.getClan().getLevel() < 5))
                {
                        activeChar.sendPacket(Msg.INVALID_TARGET);
                        return false;
                }
                target.getClan().incReputation(rep, false, "admin_manual");
                activeChar.sendMessage("Added " + rep + " clan points to clan " + target.getClan().getName() + ".");
        }
        catch (NumberFormatException nfe)
        {
                activeChar.sendMessage("Please specify a number of clan points to add.");
        }
}

Чревато - ничем.

Благодарю Вас! Мне бы что бы эту ошибку съедало как Вы сказали)
Верно сделала? Добавила в конец.
Мб со скобками еще переборщила в конце. Гляньте пожалуйста)

Код:
public class AdminCommandHandler implements ICommandHandler
{
    private static final Logger _log = Logger.getLogger(AdminCommandHandler.class.getName());

    private final HashMap<String, IAdminCommandHandler> _datatable;

    public static final String GROUP_NONE = "none";
    public static final String GROUP_HELP = "help";
    public static final String GROUP_TELEPORT = "teleport";
    public static final String GROUP_CW = "cursed weapons";
    public static final String GROUP_BANS = "bans";
    public static final String GROUP_EDITCHAR = "edit char";
    public static final String GROUP_SIEGE = "siege";
    public static final String GROUP_AUCTIONS = "auctions";
    public static final String GROUP_OLYMPIAD = "olympiad";
    public static final String GROUP_MOVIE_MAKER = "movie maker";
    public static final String GROUP_THREAD_POOL = "thread pool";
    public static final String GROUP_PETITION = "petition";
    public static final String GROUP_RELOAD = "reload";
    public static final String GROUP_DEBUG = "debug";
    public static final String GROUP_GEODATA = "geodata";
    public static final String GROUP_MANAGESERVER = "ManageServer_0";
    public static final String GROUP_MANAGESERVER1 = "ManageServer_1";
    public static final String GROUP_MANAGESERVER2 = "ManageServer_2";
    public static final String GROUP_MANAGESERVER3 = "ManageServer_3";
    public static final String GROUP_MANAGESERVER4 = "ManageServer_4";
    public static final String GROUP_MANAGESERVER5 = "ManageServer_5";
    public static final String GROUP_MANAGESERVER6 = "ManageServer_6";

    public static AdminCommandHandler getInstance()
    {
        return SingletonHolder._instance;
    }

    private AdminCommandHandler()
    {
        _datatable = new HashMap<String, IAdminCommandHandler>();

        registerAdminCommandHandler(new AdminAdmin());
        registerAdminCommandHandler(new AdminAnnouncements());
        registerAdminCommandHandler(new AdminAttribute());
        registerAdminCommandHandler(new AdminAuctions());
        registerAdminCommandHandler(new AdminBan());
        registerAdminCommandHandler(new AdminCamera());
        registerAdminCommandHandler(new AdminCancel());
        registerAdminCommandHandler(new AdminClanHall());
        registerAdminCommandHandler(new AdminCreateItem());
        registerAdminCommandHandler(new AdminCursedWeapons());
        registerAdminCommandHandler(new AdminDebug());
        registerAdminCommandHandler(new AdminDelete());
        registerAdminCommandHandler(new AdminDisconnect());
        registerAdminCommandHandler(new AdminDoorControl());
        registerAdminCommandHandler(new AdminEditChar());
        registerAdminCommandHandler(new AdminEffects());
        registerAdminCommandHandler(new AdminEnchant());
        registerAdminCommandHandler(new AdminEvents());
        registerAdminCommandHandler(new AdminFame());
        registerAdminCommandHandler(new AdminFence());
        registerAdminCommandHandler(new AdminGeodata());
        registerAdminCommandHandler(new AdminGm());
        registerAdminCommandHandler(new AdminGmChat());
        registerAdminCommandHandler(new AdminHeal());
        registerAdminCommandHandler(new AdminHelpPage());
        registerAdminCommandHandler(new AdminIP());
        registerAdminCommandHandler(new AdminKill());
        registerAdminCommandHandler(new AdminLevel());
        registerAdminCommandHandler(new AdminMammon());
        registerAdminCommandHandler(new AdminManor());
        registerAdminCommandHandler(new AdminMenu());
        registerAdminCommandHandler(new AdminMonsterRace());
        registerAdminCommandHandler(new AdminMovieMaker());
        registerAdminCommandHandler(new AdminNochannel());
        registerAdminCommandHandler(new AdminOlympiad());
        registerAdminCommandHandler(new AdminOther());
        registerAdminCommandHandler(new AdminPetition());
        registerAdminCommandHandler(new AdminPledge());
        registerAdminCommandHandler(new AdminPolymorph());
        registerAdminCommandHandler(new AdminThreadPool());
        registerAdminCommandHandler(new AdminQuests());
        registerAdminCommandHandler(new AdminReload());
        registerAdminCommandHandler(new AdminRepairChar());
        registerAdminCommandHandler(new AdminRes());
        registerAdminCommandHandler(new AdminRide());
        registerAdminCommandHandler(new AdminRideWyvern());
        registerAdminCommandHandler(new AdminServer());
        registerAdminCommandHandler(new AdminScripts());
        registerAdminCommandHandler(new AdminShop());
        registerAdminCommandHandler(new AdminShutdown());
        registerAdminCommandHandler(new AdminSiege());
        registerAdminCommandHandler(new AdminSkill());
        registerAdminCommandHandler(new AdminSpawn());
        registerAdminCommandHandler(new AdminSS());
        registerAdminCommandHandler(new AdminTarget());
        registerAdminCommandHandler(new AdminTeleport());
        registerAdminCommandHandler(new AdminVitLevel());
        registerAdminCommandHandler(new AdminZone());
    }

    public void registerAdminCommandHandler(final IAdminCommandHandler handler)
    {
        try
        {
            if(handler.getAdminCommandList().length != handler.getCommandGroup().length || handler.getAdminCommandList().length != handler.getDescription().length)
            {
                _log.info("Incorrect help imlemented in class: " + handler.getClass().getName());
                return;
            }
        }
        catch(final Exception e)
        {
            _log.info("Null help in class: " + handler.getClass().getName());
            return;
        }

        final String[] ids = handler.getAdminCommandList();
        for(final String element : ids)
            _datatable.put(element.toLowerCase(), handler);
    }

    public IAdminCommandHandler getAdminCommandHandler(final String adminCommand)
    {
        String command = adminCommand;

        int index;
        if((index = adminCommand.indexOf(" ")) != -1)
            command = adminCommand.substring(0, index);

        return _datatable.get(command);
    }

    public void useAdminCommandHandler(final L2Player activeChar, final String adminCommand)
    {
        if(!(activeChar.isGM() || activeChar.getPlayerAccess().UseGMComand))
        {
            activeChar.sendMessage(new CustomMessage("l2n.clientpackets.SendBypassBuildCmd.NoCommandOrAccess", activeChar).addString(adminCommand));
            return;
        }

        final String[] wordList = adminCommand.split(" ");
        final IAdminCommandHandler handler = _datatable.get(wordList[0]);
        if(handler != null)
        {
            int command_success = 0;
            try
            {
                for(final String e : handler.getAdminCommandList())
                    if(e.toString().equalsIgnoreCase(wordList[0]))
                    {
                        command_success = handler.useAdminCommand(adminCommand, activeChar) ? 1 : 0;
                        break;
                    }
            }
            catch(final Exception e)
            {
                _log.log(Level.WARNING, "", e);
            }
            Log.LogCommand(activeChar, Log.CMD_ADMH, adminCommand, command_success);

        }
    }

    /**
     * Алгоритм не оптимальный, но затраты на построение списка команд мизерны
     * по сравнению со всем другим
     *
     * @param command
     *            команда для поиска хелпа
     * @return хелп к команде
     */
    public String getDescriptionForCommand(final String command)
    {
        final String hlp = "Описание отсутсвует";

        final IAdminCommandHandler handler = _datatable.get(command);
        for(int i = 0; i < handler.getAdminCommandList().length; i++)
            if(handler.getAdminCommandList()[i].equals(command))
            {
                final String[] descList = handler.getDescription();
                return descList != null ? descList[i] : hlp;
            }
        return hlp;
    }

    /**
     * Ищет группу к команде
     *
     * @param command
     *            команда для поиска группы
     * @return группа команды
     */
    public String getGroupForCommand(final String command)
    {
        final String group = GROUP_NONE;

        final IAdminCommandHandler handler = _datatable.get(command);
        for(int i = 0; i < handler.getAdminCommandList().length; i++)
            if(handler.getAdminCommandList()[i].equals(command))
            {
                final String[] groupList = handler.getCommandGroup();
                return groupList != null ? groupList[i] : group;
            }
        return group;
    }

    /**
     * @return размер комманд
     */
      
    public int size()
    {
        return _datatable.size();
    }

    public void clear()
    {
        _datatable.clear();
    }

    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder
    {
        protected static final AdminCommandHandler _instance = new AdminCommandHandler();
    }

    /**
     * Получение списка зарегистрированных админ команд
     *
     * @return список команд
     */
    public Set<String> getAllCommands()
    {
        return _datatable.keySet();
    }
    
    else if (action.equals("addrep"))
{
        try
        {
                int rep = Integer.parseInt(st.nextToken());
                if ((target.getClan() == null) || (target.getClan().getLevel() < 5))
                {
                        activeChar.sendPacket(Msg.INVALID_TARGET);
                        return false;
                }
                target.getClan().incReputation(rep, false, "admin_manual");
                activeChar.sendMessage("Added " + rep + " clan points to clan " + target.getClan().getName() + ".");
        }
        catch (NumberFormatException nfe)
        {
                activeChar.sendMessage("Please specify a number of clan points to add.");
        }
}
}
Ответ
#4
Все неверно.
Вам нужно в файле AdminPledge.java найти код отвечающий за добавление репутации и завернуть его в try-catch.
Ответ
#5
ANZO Написал:Все неверно.
Вам нужно в файле AdminPledge.java найти код отвечающий за добавление репутации и завернуть его в try-catch.

Я скорей заверну масо в лаваш, чем то что Вы написали;)
Про найти код поняла, а вот про заворот кода нет. Оьясните)
И еще вопрос, для чего я добавила код?
И для чего собственно заворот кода?
И как все это повлияет на работу кода и сервера в целом?
Ответ
#6
KateKate7912 Написал:Я скорей заверну масо в лаваш, чем то что Вы написалиWink
Про найти код поняла, а вот про заворот кода нет. Оьясните)
И еще вопрос, для чего я добавила код?
И для чего собственно заворот кода?
И как все это повлияет на работу кода и сервера в целом?

Нужно поместить код, который "бросает" эксепшн (который в лог потом пишется, т.к. не ловится) в:
Код:
try {
...
} catch (Exception e) {
LOG.error("Error occured : " + e.getMessage());
}
Поищите в проекте как это уже сделано.
Или же разобраться с этим местом, чтобы оно не бросало эксепшн.
Ответ
#7
shegan Написал:Нужно поместить код, который "бросает" эксепшн (который в лог потом пишется, т.к. не ловится) в:
Код:
try {
...
} catch (Exception e) {
LOG.error("Error occured : " + e.getMessage());
}
Поищите в проекте как это уже сделано.
Или же разобраться с этим местом, чтобы оно не бросало эксепшн.

Здравуйте! Честно говоря я уже запуталась.
Наверно когда вернусь с работы, сравню admin comand handler с другого сурса l2n.
Так как на l2n такую ошибку первый раз вижу. Я выше кидала код.
Не обращая внимания на нижнюю правку можете посмотреть. Там явно что то не так.
Жаль сама сейчас сравнить не могу.

Добавлено через 8 часов 20 минут
Решено! Всем счастья!
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Ошибка запуска гейм сервера Kensiro 1 1,747 01-23-2018, 04:41 PM
Последний пост: PROGRAMMATOR
  Время сервера "/time" не совпадает с картой ntking 4 2,162 05-04-2017, 02:52 PM
Последний пост: ntking
  Решение ошибка в алт+б за оплату Valent 1 1,719 04-29-2017, 10:57 PM
Последний пост: zGoSu
  Ошибка Nez 0 1,306 08-06-2016, 04:43 AM
Последний пост: Nez
  Настройка сервера AndSrt 3 1,600 11-03-2015, 12:00 AM
Последний пост: Deeez
  Ошибка при изменении файла в l2fileedit loodgieter 1 4,467 01-06-2015, 05:46 PM
Последний пост: SmileForMe
  Ошибка (Баффер) Snowball1 0 1,055 01-03-2015, 07:01 AM
Последний пост: Snowball1
  Синхронизация координат клиента и сервера awers 5 2,798 11-03-2014, 12:05 AM
Последний пост: linliss
  Скрипт установки сервера не работает. Linux /. SunWar 2 1,324 08-24-2014, 06:48 PM
Последний пост: SunWar
  Проблема в логах Walker 1 1,205 05-08-2014, 05:56 PM
Последний пост: Ashe

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)