ArrayIndexOutOfBounds但正在记录项目

时间:2015-10-28 19:05:37

标签: java arrays json

我正在尝试创建一个JSONObject,但我得到了一些奇怪的结果。

我正在使用此for循环

Object[] q = null;
Deque<String> queue = new ArrayDeque<String>();
if(queue.size() > 7){
    queue.remove();
}
queue.add(aux);
q = queue.toArray();
for(int i = 0; i < q.length; i++){
   String[] temp = q[i].toString().split(",");
   logger.info(temp[2]);
   JSONObject json = new JSONObject();
   json.put("stamp", temp[0]);
   json.put("zone", temp[1]);
   json.put("name", temp[2]);
   json.put("val", temp[3]);
   jArray2.put(json);
 } 

但我在服务器日志中收到此错误:

java.lang.ArrayIndexOutOfBoundsException: 2
    at publicwebsite.util.PieChartData.getCSV(PieChartData.java:114)

正如您所看到的,我正在记录错误所在的temp[2]的结果。然而,在应用程序日志中,temp[2]已成功记录:

2015-10-28 18:55:37,031 [ajp-0.0.0.0-8009-2] INFO  publicwebsite.util.PieChartData - "apples"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO  publicwebsite.util.PieChartData - "oranges"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO  publicwebsite.util.PieChartData - "pears"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO publicwebsite.util.PieChartData - "pineapples"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO  publicwebsite.util.PieChartData - "strawberries"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO  publicwebsite.util.PieChartData - "plumbs"
2015-10-28 18:55:37,033 [ajp-0.0.0.0-8009-2] INFO  publicwebsite.util.PieChartData - "berries"

输出 logger.info(Arrays.toString(q));

[2015-09-07 04:00:00,EDT,"apples",9707, 2015-09-07 04:00:00,EDT,"oranges",1799, 2015-09-07 04:00:00,EDT,"pears",1961, 2015-09-07 04:00:00,EDT,"pineapples",4669, 2015-09-07 04:00:00,EDT,"strawberries",245, 2015-09-07 04:00:00,EDT,"plumbs",367, 2015-09-07 04:00:00,EDT,"berries",550

当日志显示有明显的东西时,怎么会有一个数组越界错误?

2 个答案:

答案 0 :(得分:0)

您正在检查temp[2]但稍后访问

几行
 json.put("val", temp[3]);

更好:

 if ( temp.length > 3 )
       json.put("val", temp[3]);

<强>底线

对来自程序外部并使用文字静态索引的数据使用.split()时,需要先检查长度,静音假设长度始终等于最高索引总是会导致此类错误

答案 1 :(得分:0)

应用程序服务器中可能有另一个类实例正在写入日志或另一个JVM正在运行。 其他东西写入日志似乎。