我写了这个方法:
@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时仍然会导致相同的异常。
答案 0 :(得分:-1)
这个问题的一个解决方案是使用另一个用于NullPointerException的catch语句,然后调用在Date为null时调用的代码。您还必须将变量“File f”移出try-statement块以确保在catch中访问。
实施例,
catch(NullPointerException e) {
System.out.println("File: " + f.getAbsolutePath() + "\tDATETIME_ORIGINAL: no data!");
}