Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 ArrayIndexOutOfBoundsException:-32443,带迭代器。下一个在LinkedList上_Java_Jakarta Ee_Indexoutofboundsexception - Fatal编程技术网

Java ArrayIndexOutOfBoundsException:-32443,带迭代器。下一个在LinkedList上

Java ArrayIndexOutOfBoundsException:-32443,带迭代器。下一个在LinkedList上,java,jakarta-ee,indexoutofboundsexception,Java,Jakarta Ee,Indexoutofboundsexception,在我的EJB应用程序(JavaEE)上,我继续向db中插入一个列表(LinkedList),结果出现错误:ArrayIndexOutOfBoundsException:-32443 我的代码是 Iterator itertator = myList.iterator(); while (itertator.hasNext()) { MyObject myObject = (MyObject) itertator.next(); ... } 我想知道,我已经在使

在我的EJB应用程序(JavaEE)上,我继续向db中插入一个列表(LinkedList),结果出现错误:ArrayIndexOutOfBoundsException:-32443

我的代码是

Iterator itertator = myList.iterator();
while (itertator.hasNext()) {         
    MyObject myObject = (MyObject) itertator.next();
    ...
}
我想知道,我已经在使用迭代器了。下一步,为什么它会有indexOutOfBound

完整日志:

Error message: java.lang.ArrayIndexOutOfBoundsException: -32443; nested exception is: com.my.exception.MyException
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapEJBException(RemoteExceptionMappingStrategy.java:411)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapException(RemoteExceptionMappingStrategy.java:113)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.setUncheckedException(RemoteExceptionMappingStrategy.java:203)
at com.ibm.ejs.container.EJSDeployedSupport.setUncheckedException(EJSDeployedSupport.java:296)
Java客户端以多线程方式访问我的EJB应用程序,该列表在EJB中实现,方法是从客户端获取id,将数据插入到linkedlist中,然后通过如上所述的迭代将列表发送到insert,随机获得错误


有人能帮忙找到线索吗?或者是因为我使用的是LinkedList,所以对象的大小不够?

我认为列表不是线程安全的。如果列表是由多个线程访问的,而另一个线程此时访问最后一个元素,则
迭代器.hasNext()
为true。但是当另一个线程执行迭代器.next()时,您将尝试访问下一个不可用的元素。错误随机发生的事实是另一个提示。在这种情况下,使用线程安全列表将是一个好主意。否则,需要手动同步列表:

synchronized(list) {
    Iterator i = list.iterator(); // Must be in synchronized block
    while (i.hasNext())
        foo(i.next());
}

我假设列表不是线程安全的。如果列表是由多个线程访问的,而另一个线程此时访问最后一个元素,则
迭代器.hasNext()
为true。但是当另一个线程执行迭代器.next()时,您将尝试访问下一个不可用的元素。错误随机发生的事实是另一个提示。在这种情况下,使用线程安全列表将是一个好主意。否则,需要手动同步列表:

synchronized(list) {
    Iterator i = list.iterator(); // Must be in synchronized block
    while (i.hasNext())
        foo(i.next());
}

既然您得到了一个
com.my.exception.MyException
,那真的是引发异常的位置吗?
RemoteExceptionMappingStrategy.java:411发生了什么事?我想这不是你发布的代码,对吧?我感觉你在错误的地方寻找错误。迭代器.next()不应引发此异常,除非存在同步问题。(javadoc强调LinkedList是不同步的)。所以我猜这就是你需要看的。祝你好运@Thomas,感谢您的反馈,RemoteExceptionMappingStrategy.java:411是由Websphere(用于部署JavaEE应用程序)抛出的,我也不确定这是否是由应用程序服务器引起的此类错误。@S.L.Barth这就是我要寻找的,在我的客户端,我使用多线程并调用EJB,代码是EJB中的错误,在客户端,我构造LinkedList发送到EJB,在EJB中,我还将数据构建到LinkedList中,然后使用它插入数据库。您认为我应该在哪里更改同步?引发异常的位置应该是一个合理的开始位置。然后,您必须尝试了解代码中的线程如何交互,以及它们应该如何交互。既然您得到了
com.my.exception.MyException
,那么这真的是引发异常的位置吗?
RemoteExceptionMappingStrategy.java:411发生了什么事?我想这不是你发布的代码,对吧?我感觉你在错误的地方寻找错误。迭代器.next()不应引发此异常,除非存在同步问题。(javadoc强调LinkedList是不同步的)。所以我猜这就是你需要看的。祝你好运@Thomas,感谢您的反馈,RemoteExceptionMappingStrategy.java:411是由Websphere(用于部署JavaEE应用程序)抛出的,我也不确定这是否是由应用程序服务器引起的此类错误。@S.L.Barth这就是我要寻找的,在我的客户端,我使用多线程并调用EJB,代码是EJB中的错误,在客户端,我构造LinkedList发送到EJB,在EJB中,我还将数据构建到LinkedList中,然后使用它插入数据库。您认为我应该在哪里更改同步?引发异常的位置应该是一个合理的开始位置。然后,您必须尝试理解代码中的线程如何交互,以及它们应该如何交互。我已经尝试过了,但可能不在正确的位置,仍然会出现相同的错误(但随机)。现在我再次同步了列表,但只是担心性能问题;让我们知道它是否能解决问题;我已经试过了,但可能不在正确的位置,仍然得到了相同的错误(但随机)。现在我再次同步了列表,但只是担心性能问题;让我们知道它是否能解决问题;