【问题标题】:ArrayIndexOutOfBoundsException though array has valueArrayIndexOutOfBoundsException 虽然数组有值
【发布时间】:2018-02-26 09:30:03
【问题描述】:

我尝试通过使用 IF 条件比较两个数组值来进行验证,如下所示:

if (!bomDataArray[1].trim().equals(agileDataArray[0].trim())) {
                updateItemComments(bomDataArray[17], Constant.DESCRIPTOIN_MISMATCH);
            }

我可以在服务器中使用 sysout 打印值。 代码:

System.out.println("bomDataArray[1].trim().equals(agileDataArray[0].trim() ---> "+bomDataArray[1].trim() + "---" +(agileDataArray[0].trim()));

服务器中的输出: [2018-02-26T17:22:51.158+0800] [Payara 4.1] [INFO] [] [] [tid: _ThreadID=28 _ThreadName=http-thread-pool::http-listener-1(5)] [timeMillis : 1519636971158] [levelValue: 800] [[ bomDataArray[1].trim().equals(agileDataArray[0].trim() ---> 电容器,陶瓷多层,表面贴装(芯片)---电容器,陶瓷多层,表面贴装(芯片)]]

运行后,系统抛出ArrayIndexOutOfBoundsException。

堆栈跟踪:

java.lang.ArrayIndexOutOfBoundsException: 1
    at com.flextronics.pdp.parser.zhuhai.ZhuhaiBomComparisonParserPlugin.checkForAgileDiscrepancy(ZhuhaiBomComparisonParserPlugin.java:226)
    at com.flextronics.pdp.parser.zhuhai.ZhuhaiBomComparisonParserPlugin.updateBomData(ZhuhaiBomComparisonParserPlugin.java:206)
    at com.flextronics.pdp.parser.zhuhai.ZhuhaiBomComparisonParserPlugin.generatePdpItem(ZhuhaiBomComparisonParserPlugin.java:42)
    at com.flextronics.pdp.parser.zhuhai.ZhuhaiBomComparisonParserPlugin.process(ZhuhaiBomComparisonParserPlugin.java:34)
    at com.flextronics.pdp.core.engine.executor.java.JavaParserExecutor.transform(JavaParserExecutor.java:43)
    at com.flextronics.pdp.core.engine.executor.PdpParserExecutor.execute(PdpParserExecutor.java:79)
    at com.flextronics.pdp.core.engine.PdpEngine.parse(PdpEngine.java:60)
    at com.flextronics.pdp.web.ux.viewmodels.documentcontrol.BomParsingViewModel.processBoms(BomParsingViewModel.java:717)
    at sun.reflect.GeneratedMethodAccessor3720.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.zkoss.bind.impl.ParamCall.call(ParamCall.java:121)
    at org.zkoss.bind.impl.BinderImpl.doGlobalCommandExecute(BinderImpl.java:1655)
    at org.zkoss.bind.impl.BinderImpl.doGlobalCommand(BinderImpl.java:1625)
    at org.zkoss.bind.impl.BinderImpl.access$300(BinderImpl.java:112)
    at org.zkoss.bind.impl.BinderImpl$QueueListener.onEvent(BinderImpl.java:300)
    at org.zkoss.zk.ui.event.impl.DesktopEventQueue$QueueListener.onEvent(DesktopEventQueue.java:162)
    at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2752)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2723)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2664)

请帮助我了解这其中出了什么问题?

【问题讨论】:

  • index out of bounds 意味着您正在尝试访问比数组中的项目更大的索引,例如数组 [1,2] 仅具有索引 0 和 1。如果您尝试访问索引 2 这样会弹出一个错误
  • 我厌倦了打印这些值,我能够做到。 (bomDataArray[1].trim().equals(agileDataArray[0].trim() ---> 电容器,陶瓷多层,表面贴装(芯片)---电容器,陶瓷多层,表面贴装(芯片))跨度>
  • 您确定在 if 语句中引发了异常吗?

标签: arrays indexoutofboundsexception


【解决方案1】:

如果您发布的代码在第 226 行的 ZhuhaiBomComparisonParserPlugin.java 中,正如堆栈跟踪所说,那么问题是您正在尝试访问数组 bomDataArray 的第二个元素(索引为 1)但数组有只有 1 个元素或为空。您需要找出为什么数组的元素少于 2 个。

顺便说一句,这显然是您的应用程序代码中的错误,与您的应用程序部署到的 Payara 服务器无关。你需要修复你的代码。

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多