检查NullPointerException原因

时间:2014-11-05 18:37:47

标签: java nullpointerexception try-catch

我有一个我尝试排序的某个类的ArrayList,但是在排序过程中我得到一个NullPointerException。 我用try-catch包装了我的命令,以便找到数组中的哪个元素导致异常。 我如何检查捕获量以找出哪个是有问题的元素?

以下是代码:

List<SingleMeasurementValuePoint> sortedList = new ArrayList<SingleMeasurementValuePoint>(deviceMeasurementPoints);
    try {
      Collections.sort(sortedList, new TimeAndComponentSort());
    } catch (Exception e) {
        System.out.println();
    }

比较器中的代码,即TimeAndComponentSort是:

public class TimeAndComponentSort implements Comparator<SingleMeasurementValuePoint> {

@Override
public int compare(SingleMeasurementValuePoint point1, SingleMeasurementValuePoint point2) {
    int val = point1.compareTo(point2);
    if (val == 0) {
        return point1.getComponentId().compareTo(point2.getComponentId());
    }
    else {
        return val;
    }
}
}

1 个答案:

答案 0 :(得分:0)

我不认为您可以查看堆栈跟踪并确定List中的哪个元素是null。如果您的null中包含List个元素,则最简单的解决方法可能是修复您的Comparator以处理null(s)。此外,您可以使用Comparator记录null(s)。基本上,像

@Override
public int compare(SingleMeasurementValuePoint point1,
        SingleMeasurementValuePoint point2) {
    if (point1 == null && point2 == null) {
        System.out.println("null point1 and point2");
        return 0;
    } else if (point1 == null) {
        System.out.println("null point1");
        return -1;
    } else if (point2 == null) {
        System.out.println("null point2");
        return 1;
    }
    int val = point1.compareTo(point2);
    if (val == 0) {
        return point1.getComponentId().compareTo(
                point2.getComponentId());
    } else {
        return val;
    }
}

仍然没有告诉你原始索引是null的哪个元素。如果这是您真正需要的,那么您可以编写一个方法来返回第一个null(或-1)的索引,如

public static <T> int findFirstNull(List<T> al) {
    for (int i = 0, len = al.size(); i < len; i++) {
        if (al.get(i) == null) {
            return i;
        }
    }
    return -1;
}

最后,您的catch块应记录其Exception

} catch (Exception e) {
    // System.out.println();
    e.printStackTrace();
}