Сообщений: 163
Тем: 30
Зарегистрирован: Dec 2014
Репутация:
297
10-13-2015, 04:04 AM
(Сообщение последний раз редактировалось: 10-13-2015, 04:09 AM KateKate7912.)
Здравствуйте, уважаемые администраторы форума!
После того как забыла указать в админ панели количество нужной для выдачи клан-репутации выходит вот такая вот ошибка.
Подмечу: Когда указываю сколько выдать репутации ошибок нет и она выдается.
Неприятно такое видеть в логах. Как исправить и чем это чревато?
Код: 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,303
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
5,617
Исправить - добавить проверку на нужное количество параметров в хендлере 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.");
}
}
Чревато - ничем.
Сообщений: 163
Тем: 30
Зарегистрирован: Dec 2014
Репутация:
297
10-13-2015, 04:28 AM
(Сообщение последний раз редактировалось: 10-13-2015, 07:35 AM KateKate7912.)
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.");
}
}
}
Сообщений: 2,303
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
5,617
Все неверно.
Вам нужно в файле AdminPledge.java найти код отвечающий за добавление репутации и завернуть его в try-catch.
Сообщений: 163
Тем: 30
Зарегистрирован: Dec 2014
Репутация:
297
ANZO Написал:Все неверно.
Вам нужно в файле AdminPledge.java найти код отвечающий за добавление репутации и завернуть его в try-catch.
Я скорей заверну масо в лаваш, чем то что Вы написали;)
Про найти код поняла, а вот про заворот кода нет. Оьясните)
И еще вопрос, для чего я добавила код?
И для чего собственно заворот кода?
И как все это повлияет на работу кода и сервера в целом?
Сообщений: 128
Тем: 0
Зарегистрирован: Feb 2014
Репутация:
625
KateKate7912 Написал:Я скорей заверну масо в лаваш, чем то что Вы написали
Про найти код поняла, а вот про заворот кода нет. Оьясните)
И еще вопрос, для чего я добавила код?
И для чего собственно заворот кода?
И как все это повлияет на работу кода и сервера в целом?
Нужно поместить код, который "бросает" эксепшн (который в лог потом пишется, т.к. не ловится) в:
Код: try {
...
} catch (Exception e) {
LOG.error("Error occured : " + e.getMessage());
}
Поищите в проекте как это уже сделано.
Или же разобраться с этим местом, чтобы оно не бросало эксепшн.
Сообщений: 163
Тем: 30
Зарегистрирован: Dec 2014
Репутация:
297
10-13-2015, 07:52 AM
(Сообщение последний раз редактировалось: 10-13-2015, 04:13 PM KateKate7912.)
shegan Написал:Нужно поместить код, который "бросает" эксепшн (который в лог потом пишется, т.к. не ловится) в:
Код: try {
...
} catch (Exception e) {
LOG.error("Error occured : " + e.getMessage());
}
Поищите в проекте как это уже сделано.
Или же разобраться с этим местом, чтобы оно не бросало эксепшн.
Здравуйте! Честно говоря я уже запуталась.
Наверно когда вернусь с работы, сравню admin comand handler с другого сурса l2n.
Так как на l2n такую ошибку первый раз вижу. Я выше кидала код.
Не обращая внимания на нижнюю правку можете посмотреть. Там явно что то не так.
Жаль сама сейчас сравнить не могу.
Добавлено через 8 часов 20 минут
Решено! Всем счастья!
|