Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缓存时发生Java错误_Java - Fatal编程技术网

缓存时发生Java错误

缓存时发生Java错误,java,Java,我有一个游戏,当我使用这种方法缓存项目时,当我第一次进入游戏时,它可以正常工作 public void add(IItem item, int priceId, int priceAmount) { try { MapleInventoryManipulator.removeFromSlot(c, MapleItemInformationProvider.getInstance().getInventoryType(item.getItemId()), item.getPosit

我有一个游戏,当我使用这种方法缓存项目时,当我第一次进入游戏时,它可以正常工作

public void add(IItem item, int priceId, int priceAmount) {
    try {
    MapleInventoryManipulator.removeFromSlot(c, MapleItemInformationProvider.getInstance().getInventoryType(item.getItemId()), item.getPosition(), item.getQuantity(), true);
    MarketItem m = new MarketItem(getPlayer().getName(), (IItem)item, priceId, priceAmount);
    MarketItem s = new MarketItem(getPlayer().getName(), (IItem)item);
    //Market.add(m);
    Market.add(s);
   } catch (Exception e) {
   e.printStackTrace();
   }
    System.out.println(Market.getItems().get(0).getItem() == null ? "Item is null" : "Item is not null.");
}

public static void add(MarketItem item) {
    lock.writeLock().lock();
    try {
    try {
        itemCache.add(item); //try save directly to db see if i get stuck still
        System.out.println("Added item " + item.getName());
    } finally {
        lock.writeLock().unlock();
    }
   } catch (Exception e) {
   e.printStackTrace();
   }
}
我可以无限次缓存新项目,但使用此方法保存时

public static void save() {
    try {
        PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("DELETE FROM market_items");
        ps.execute();
        ps.close();
        //After purging the table, insert updated values...
        List<MarketItem> equips = new LinkedList<MarketItem>();
        List<MarketItem> notEquips = new LinkedList<MarketItem>();
        lock.readLock().lock();
        try {
            for (MarketItem item : itemCache) {
                item.setType((byte)0);
                if (item.getInventoryType() == 1) {
                    equips.add(item);
                } else {
                    notEquips.add(item);
                }
            }
        } finally {
            lock.readLock().lock();
        }
        sLock.readLock().lock();
        try {
            for (String keySet : storage.keySet()) {
                for (MarketItem item : storage.get(keySet)) {
                    item.setType((byte)1);
                    if (item.getInventoryType() == 1) {
                        equips.add(item);
                    } else {
                        notEquips.add(item);
                    }
                }
            }
        } finally {
            sLock.readLock().unlock();
        }
        ps = DatabaseConnection.getConnection().prepareStatement("INSERT INTO market_items (`itemid`, `ownername`, `priceItem`, `priceAmount`, `itemname`, `inventorytype`, `type`) VALUES (?, ?, ?, ?, ?, ?, ?)");
        for (MarketItem notEquip : notEquips) {
            ps.setInt(1, notEquip.getItem().getItemId());
            ps.setString(2, notEquip.getOwner());
            ps.setInt(3, notEquip.getPriceItem());
            ps.setInt(4, notEquip.getPriceAmount());
            ps.setString(5, notEquip.getName());
            ps.setByte(6, notEquip.getInventoryType());
            ps.setByte(7, notEquip.getType());
            ps.execute();
        }
        ps.close();
        ps = DatabaseConnection.getConnection().prepareStatement("INSERT INTO market_items (`itemid`, `ownername`, `priceItem`, `priceAmount`, `itemname`, `inventorytype`, `type`, `acc`, `avoid`, `dex`, `flag`, `hands`, `hp`, `int`, `itemexp`, `jump`, `level`, `luk`, `matk`, `mdef`, `mp`, `owner`, `speed`, `str`, `vicious`, `watk`, `wdef`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        for (MarketItem equip : equips) {
            Equip eq = (Equip)equip.getItem();
            ps.setInt(1, equip.getItem().getItemId());
            ps.setString(2, equip.getOwner());
            ps.setInt(3, equip.getPriceItem());
            ps.setInt(4, equip.getPriceAmount());
            ps.setString(5, equip.getName());
            ps.setByte(6, equip.getInventoryType());
            ps.setByte(7, equip.getType());
            ps.setShort(8, eq.getAcc());
            ps.setShort(9, eq.getAvoid());
            ps.setShort(10, eq.getDex());
            ps.setShort(11, eq.getFlag());
            ps.setShort(12, eq.getHands());
            ps.setShort(13, eq.getHp());
            ps.setShort(14, eq.getInt());
            ps.setInt(15, eq.getItemExp());
            ps.setShort(16, eq.getJump());
            ps.setShort(17, eq.getLevel());
            ps.setShort(18, eq.getLuk());
            ps.setShort(19, eq.getMatk());
            ps.setShort(20, eq.getMdef());
            ps.setShort(21, eq.getMp());
            ps.setString(22, eq.getOwner());
            ps.setShort(23, eq.getSpeed());
            ps.setShort(24, eq.getStr());
            ps.setShort(25, eq.getVicious());
            ps.setShort(26, eq.getWatk());
            ps.setShort(27, eq.getWdef());
            ps.execute();
        }
        ps.close();
    } catch (SQLException e) {
        System.out.println("Exception caught saving market items: ");
        e.printStackTrace();
    }
}
publicstaticvoidsave(){
试一试{
PreparedStatement ps=DatabaseConnection.getConnection().prepareStatement(“从市场中删除项目”);
ps.execute();
ps.close();
//清除表后,插入更新的值。。。
List equips=新链接列表();
List notEquips=newlinkedlist();
lock.readLock().lock();
试一试{
对于(市场项目:项目缓存){
item.setType((字节)0);
if(item.getInventoryType()==1){
设备。添加(项目);
}否则{
添加(项目);
}
}
}最后{
lock.readLock().lock();
}
sLock.readLock().lock();
试一试{
for(字符串键集:storage.keySet()){
for(市场项目:存储。获取(键集)){
item.setType((字节)1);
if(item.getInventoryType()==1){
设备。添加(项目);
}否则{
添加(项目);
}
}
}
}最后{
sLock.readLock().unlock();
}
ps=DatabaseConnection.getConnection().prepareStatement(“插入市场项目(`itemid`、`ownername`、`priceItem`、`priceAmount`、`itemname`、`inventorytype`、`type`)值(?、、、、、、、、、、、、?);
for(市场术语notEquip:notEquips){
ps.setInt(1,notEquip.getItem().getItemId());
ps.setString(2,notEquip.getOwner());
ps.setInt(3,notEquip.getPriceItem());
ps.setInt(4,notEquip.getPriceAmount());
ps.setString(5,notEquip.getName());
ps.setByte(6,notEquip.getInventoryType());
ps.setByte(7,notEquip.getType());
ps.execute();
}
ps.close();
ps=DatabaseConnection.getConnection().prepareStatement(“插入市场项目(`itemid`、`ownername`、`priceItem`、`priceAmount`、`itemname`、`inventorytype`、`type`、`acc`、`avoid`、`dex`、`flag`、`hands`、`hp`、`int`、`itemexp`、`jump`、`level`、`luk`、`matk`、`mdef`、`mp`、`owner`、`speed`、`str`、`Wasty`、`watk`、`wdef`)值(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
用于(市场项目装备:装备){
装备等式=(装备)装备.getItem();
ps.setInt(1,装备.getItem().getItemId());
ps.setString(2,装备.getOwner());
ps.setInt(3,装备.getPriceItem());
ps.setInt(4,装备.getPriceAmount());
ps.setString(5,equipment.getName());
ps.setByte(6,装备.getInventoryType());
ps.setByte(7,equipment.getType());
ps.setShort(8,等式getAcc());
ps.setShort(9,等式getAvoid());
ps.setShort(10,等式getDex());
ps.setShort(11,等式getFlag());
ps.setShort(12,等式getHands());
ps.setShort(13,等式getHp());
ps.setShort(14,等式getInt());
ps.setInt(15,等式getItemExp());
ps.setShort(16,等式getJump());
ps.setShort(17,等式getLevel());
ps.setShort(18,等式getLuk());
ps.setShort(19,等式getMatk());
ps.setShort(20,等式getMdef());
ps.setShort(21,等式getMp());
ps.setString(22,等式getOwner());
ps.setShort(23,等式getSpeed());
ps.setShort(24,等式getStr());
ps.setShort(25,等式getviousic());
ps.setShort(26,等式getWatk());
ps.setShort(27,等式getWdef());
ps.execute();
}
ps.close();
}捕获(SQLE异常){
System.out.println(“保存市场项目时捕获的异常:”);
e、 printStackTrace();
}
}
当保存到数据库中时,它可以正常工作,但是现在当我试图使用
add
命令缓存一个项目时,我的代码被卡住了


我应该处理缓存还是做其他事情?

需要更多信息才能完全确定出哪里出了问题,但“我的代码卡住了”听起来像是一个锁定问题

乍一看,突出的错误看起来像保存方法中的以下块:

finally {
   lock.readLock().lock();
}

这看起来应该是一个
解锁

显示一些调试信息,错误发生的行,基本上更多的信息没有错误,所以我没有更多的信息。如果没有任何错误,你能描述什么不起作用。你真的还没有问问题。