如何解决数组索引OutOfBoundsException

时间:2018-12-21 23:42:22

标签: java arrays indexoutofboundsexception

我有以下代码。当我执行它时,出现以下错误。我在另一步骤中运行相同的代码,效果很好,但在当前步骤中失败了。

java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 17

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

def dbData = queryResults;


def mailTable = "<table style='border: 1px solid #ccc;border-collapse: collapse;'>";
def size = 17;

mailTable += "<tr style='border-top: 3px solid #ccc;'><b><u><td style='padding: 10px;bgcolor=#4169E1;'>SKU</td><td style='padding: 10px;bgcolor=#4169E1;'>Currency</td><td style='padding:10px;bgcolor=#4169E1;'>Source</td><td style='padding: 10px;bgcolor=#4169E1;'>Pricing Sort</td><td style='padding: 10px;bgcolor=#4169E1;'>Role</td><td style='padding: 10px;bgcolor=#4169E1;'>Product Manager</td><td style='padding: 10px;bgcolor=#4169E1;'>Price</td><td style='padding: 10px;bgcolor=#4169E1;'>Layout</td><td style='padding: 10px;bgcolor=#4169E1;'>Description</td><td style='padding: 10px;bgcolor=#4169E1;'>Reference</td><td style='padding: 10px;bgcolor=#4169E1;'>Global</td><td style='padding: 10px;bgcolor=#4169E1;'>Status</td><td style='padding: 10px;bgcolor=#4169E1;'>Material</td><td style='padding: 10px;bgcolor=#4169E1;'>Business</td><td style='padding: 10px;bgcolor=#4169E1;'>SB</td><td style='padding: 10px;bgcolor=#4169E1;'>Group</td><td style='padding: 10px;bgcolor=#4169E1;'>GPH Code</td></u></b></tr>"


/**
 * filling the html table with opportunity info
 * */
def index;
dbData.each {row ->

    mailTable += "<tr style='border-top: 3px solid #ccc;'>";

    for (index = 0; index < size; ++index) {
        mailTable += "<td style='padding: 10px;'>" + row.getAt(index) + "</td>";
    }

    mailTable += "</tr>";

}
mailTable += "</table>";

2 个答案:

答案 0 :(得分:1)

您正在获得Array Index OutOfBoundsException,因为您极有可能尝试访问空Array(0个元素)中的元素。我建议您在尝试从数组中获取元素之前检查数组是否为空。 我不太确定哪个Array在您的代码中引发错误,因为我无法确定数据库调用的作用。但是我猜可能是dbData或mailTable。

尝试这样的事情:

if (dbData.length != 0) {
  //run your code here that access the elements
} else { //do nothing..or whatever you want to happen when it's empty, maybe 
error? }

答案 1 :(得分:1)

老实说,我对def一无所知。这是某种lisp方法吗?,因为它不是通常的int索引java变量,所以java可能无法理解索引值。我可能是错的,我不知道def方法。非常抱歉,如果我完全错了。

欢呼