2012-06-11 46 views
3

当我调试我的代码我发现IteratorhasNext()方法返回true,但next()方法抛出NoSuchElementException异常。迭代hasnext()返回true,但下一个()抛出NoSuchElementException异常

下面是我的代码:

Collection<TradeStock> restBuy=em.createQuery("select t from TradeStock ...t.getResultList(); 

if(!restBuy.isEmpty()) 
{ 
    Iterator itrest=restBuy.iterator(); 
    while(itrest.hasNext()) 
    { 
     TradeStock ts=(TradeStock)itrest.next(); 
     x+=ts.getTradeExecutedQuantity(); 
    } 
} 

什么我收到错了吗?

+1

你不需要'isEmpty'检查;如果它是空的,'while'循环就不会被输入 – Joey

+1

,如果你使它成为'迭代器',你不需要进行转换。 –

+2

关于异常,是否有任何其他线程试图修改此迭代器 –

回答

2

代码工作时,我重新启动服务器并重新部署我的应用程序,所以没有什么是错的我猜的代码,我不能明白这一点玻璃鱼的奇怪行为!

+1

如果我想冒险猜测,那么您以前会做出更改并忘记重新部署。 (或者重新部署可能悄然失败。)因此,您在调试时看到的源代码与实际运行的代码不同。 –

1

当你说“调试我的代码”时,你的意思是使用调试器进行调试,就像在Eclipse中一样?
如果计算的表达式(表达式在Eclipse标签)包括itrest.next()然后调试器调用下一个()方法和修改您的迭代器的状态下,没有你的代码意识到这一点。
尝试调试这或者没有评估itrest.next()或日志消息

+0

我简直不敢相信,这正是我的情况。我删除了所有观看的表情,现在一切正常。我的+1 – user1451533