返回null的方法导致java.lang.NullPointerException

时间:2014-05-14 13:40:42

标签: java nullpointerexception null

我写了这个方法:

@Override
    protected String call() {
        if (list != null) {
            int s = list.size();
            Metadata metadata;
            for (int i = 0; i < s; i++) {
                try {
                    File f = list.get(i);
                    metadata = ImageMetadataReader.readMetadata(f);
                    // obtain the Exif directory
                    ExifSubIFDDirectory directory = metadata.getDirectory(ExifSubIFDDirectory.class);
                    // query the tag's value
                    Date date = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);
                    if (date != null) {
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        System.out.println("File: " + f.getAbsolutePath() + "\tDATETIME_ORIGINAL: " + sdf.format(date));
                    } else {
                        System.out.println("File: " + f.getAbsolutePath() + "\tDATETIME_ORIGINAL: no data!");
                    }

                } catch (Exception ex) {
                    ex.printStackTrace();
                    System.out.println("Error: " + ex.getLocalizedMessage());
                } finally {
                    updateProgress(i + 1, s);
                }
            }
        }
        return null;
    }

方法directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL)有时可以返回null: Source

问题是,通过调用该方法java会抛出Null Pointer Exception,所以我无法用date测试它!= null。 NetBeans还报告&#34;取消引用可能的空指针&#34;暗示。我不明白为什么会这样。为什么我无法在某个对象中存储空值并进行测试?即使我没有在变量中存储值,该方法在返回null时仍然会导致相同的异常。

1 个答案:

答案 0 :(得分:-1)

这个问题的一个解决方案是使用另一个用于NullPointerException的catch语句,然后调用在Date为null时调用的代码。您还必须将变量“File f”移出try-statement块以确保在catch中访问。

实施例,

catch(NullPointerException e) {
    System.out.println("File: " + f.getAbsolutePath() + "\tDATETIME_ORIGINAL: no data!");
}