Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
ArrayIndexOutOfBoundsException
#1
Код:
    public void addSQLAuction(String args[])
    {
        int objItem = Integer.valueOf(args[0]);
        int price = Integer.valueOf(args[1]);
        long Time = System.currentTimeMillis() / 1000;
        String timeSend = args[2];
        if (timeSend.startsWith("1"))
            Time+= 1 * 24 * 60 * 60;
        else if (timeSend.startsWith("3"))
            Time+= 3 * 24 * 60 * 60;
        else if (timeSend.startsWith("7"))
            Time+= 7 * 24 * 60 * 60;
        
        int priceId = 57;
        
        if (Integer.valueOf(args[4]) == 1)
            priceId = 57;
        else if (Integer.valueOf(args[4]) == 2)
            priceId = 21002;
        else if (Integer.valueOf(args[4]) == 3)
            priceId = 21007;
        else if (Integer.valueOf(args[4]) == 4)
            priceId = 21008;
        else if (Integer.valueOf(args[4]) == 5)
            priceId = 21000;
        else if (Integer.valueOf(args[4]) == 6)
            priceId = 21001;

            

        L2Player player = (L2Player) getSelf();
        L2ItemInstance Lot = player.getInventory().getItemByObjectId(objItem);
        if (Lot==null)
            return;
        int charId = player.getObjectId();
        String TypeItem = "Бонус";
        if (Lot.isWeapon())
            TypeItem = "Оружие";
        else if (Lot.isArmor())
            TypeItem = "Броня";
        else if (Lot.getItem().isAccessory())
            TypeItem = "Бижутерия";
        String nameItem = Lot.getName();
        
        int idItem = Lot.getItemId();
        int attEl = Lot.getAttackAttributeElement();
        int attValue = Lot.getAttackElementValue();
        int Enchant = Lot.getEnchantLevel();
        int[] armorAtt =  Lot.getDeffAttr();
        if (Lot==null)
            return;

        
        ThreadConnection con = null;
        FiltredPreparedStatement statement = null;
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("REPLACE INTO auctionitem (char_id,Item_Id,TypeItem,NameItem,price,IdItem,time,elemValue,elemType,att0,att1,att2,att3,att4,att5,Enchant,IdPrice,client,startPrice) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            statement.setInt(1, charId);
            statement.setInt(2, objItem);
            statement.setString(3, TypeItem);
            statement.setString(4, nameItem);
            statement.setInt(5, price);
            statement.setInt(6, idItem);
            statement.setLong(7, Time);
            statement.setInt(8, attValue);
            statement.setInt(9, attEl);
            statement.setInt(10, armorAtt[0]);
            statement.setInt(11, armorAtt[1]);
            statement.setInt(12, armorAtt[2]);
            statement.setInt(13, armorAtt[3]);
            statement.setInt(14, armorAtt[4]);
            statement.setInt(15, armorAtt[5]);
            statement.setInt(16, Enchant);
            statement.setInt(17, priceId);
            statement.setString(18, "");
            statement.setInt(19, price);
            statement.executeUpdate();

        }
        catch(Exception e)
        {
            }
        finally
        {
            DatabaseUtils.closeDatabaseCS(con, statement);
        }
        player.getInventory().dropItem(Lot, 1, true);
        
    }

При if (Integer.valueOf(args[4]) == 1)
priceId = 57;
else if (Integer.valueOf(args[4]) == 2)
priceId = 21002;
else if (Integer.valueOf(args[4]) == 3)
priceId = 21007;
else if (Integer.valueOf(args[4]) == 4)
priceId = 21008;
else if (Integer.valueOf(args[4]) == 5)
priceId = 21000;
else if (Integer.valueOf(args[4]) == 6)
priceId = 21001;

Работают только 1, 2, 6 а при нажатии на кнопки 3, 4 и 5
вылазит ошибка Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
Как исправить?
Ответ
#2
все же понятно и так из ошибки - на вход пришло меньше параметров, в массиве args, чем ты пытаешься считать и произошел выход за пределы массива при обращении к нему.
Ответ
#3
А как сделать, чтоб все параметры пришли?
Ответ
#4
думаю у тебя траблы в кнопке которая присылает 4args
код неполный догадываться не охота.

а еще как вариант эти аргументы вообще пустые вот и он ругаеться на то что не может извлечь пустоту,
попробуй поставь проверку на null или empty не помню...
например if(args[4]==null)
{
system.out.println("ошибка!");
}
или как то так
[Изображение: guru.gif] Сижу на zone-game, помогаю и напрягаю других.
Ответ
#5
Ссылки покажите на все эти параметры.
[4] ый индекст это значит что у вас 5+ параметров.
Наверное в тех где выдает ошибку просто не хватает параметров.
Ответ
#6
Да я чет не понял если так, то работает:
<combobox width=150 var="type" list="1 - Адена;2 - Дон Монета;3 - Спец Монета;4 - Редк Крист;5 - Монета Голос;6 - Ивент Монета">

А если не так, например вот так:
<combobox width=150 var="type" list="1 - Адена;2 - Донейт Монета;3 - Специальная Монета;4 - Редкий Крист;5 - Монета Голосования;6 - Ивент Монета">

То пишет не правильное имя.
Ответ
#7
phozik1;153795 Написал:Да я чет не понял если так, то работает:
<combobox width=150 var="type" list="1 - Адена;2 - Дон Монета;3 - Спец Монета;4 - Редк Крист;5 - Монета Голос;6 - Ивент Монета">

А если не так, например вот так:
<combobox width=150 var="type" list="1 - Адена;2 - Донейт Монета;3 - Специальная Монета;4 - Редкий Крист;5 - Монета Голосования;6 - Ивент Монета">

То пишет не правильное имя.

Максимальное значение 16 символов. Импровизируй Smile
Ответ
#8
Как увеличить?
Ответ
#9
ойлоло
Ответ
#10
phozik1 Написал:Как увеличить?

Немного переписать клиент Smile
Ответ


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


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