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

返回null的方法导致java.lang.NullPointerException,java,nullpointerexception,null,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);

我写了这个方法:

@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.getDateExifSubIFDDirectory.TAG\u DATETIME\u ORIGINAL有时会返回null:


问题是,只要调用该方法,java就会抛出空指针异常,所以我不能用date测试它=无效的NetBeans还报告取消引用可能的空指针提示。我不明白为什么会这样。为什么我不能在某个对象中存储空值并测试它?即使我不将值存储在变量中,该方法在返回null时仍会导致相同的异常。

此问题的一个解决方案是对NullPointerException使用另一个catch语句,然后调用在日期为null时调用的代码。您还必须将变量文件f移出try语句块,以确保在catch中进行访问

例如

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

您在哪一行收到此错误或警告?在这一行:Date Date=directory.getDateExifSubIFDDirectory.TAG\u DATETIME\u ORIGINAL;我甚至尝试只调用一个方法而不在任何地方存储空值:directory.getDateExifSubIFDDirectory.TAG\u DATETIME\u ORIGINAL;但仍然会得到相同的异常。这让我很困惑。这表明目录为空。所以,检查这种可能性,或者跳过它,或者报告相应的失败结果。您是正确的,variable directory有时可能为null。谢谢你的回答。不知何故,我假定它不能为null,而问题是在没有标记的情况下解析日期。我现在觉得自己很愚蠢。谢谢你的回答。我知道,但我想避免。困扰我的是我可以毫无问题地完成这项工作:私有静态字符串测试{returnnull;}。。。字符串a=测试;ifa!=null{System.out.printlnNot null;}否则{System.out.printlnNull;}您将收到取消引用可能的null指针的警告,因为您的变量目录可能为null。如果目录为null,则调用函数getDate将导致错误。我不确定这是否有帮助。尝试在调试中单步执行该程序,并确保正确声明了变量f、元数据和目录。没错,变量目录有时为空。我真不敢相信我竟然那么愚蠢。我会接受你的回答,因为这是捕捉这种异常的正确方法。谢谢。捕获NPE就像捕获异常并逃避问题。。多蠢