【问题标题】:Null pointer exception when SimpleDateFormate parsing?SimpleDateFormate解析时出现空指针异常?
【发布时间】:2020-03-31 23:27:03
【问题描述】:

我有这个方法应该取两次之间的差异,但我在 try 块的第一行代码中不断收到空指针异常。

time参数以“HH:mm:ss”格式获取函数调用的时间,time1和time2都是“HH:mm:ss”格式的全局字符串变量。

private String calculateTime(String time) {
        time2 = time;

        SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");

        Date date1;
        Date date2;
        try {
             date1 = timeFormat.parse(time1);
             date2 = timeFormat.parse(time2);
             long diff = date2.getTime() - date1.getTime();
             time1 = timeFormat.format(new Date(diff));
        } catch (ParseException e) {
            e.printStackTrace();
        }

        System.out.println("The diff is "+ time1);

        return time1;

    }
}

我已经单步执行了代码,一切似乎都设置正确,只有当它到达date1 = timeFormate.parse(time1) 时它似乎不起作用。有谁知道我可能做错了什么?

【问题讨论】:

  • 除了空指针异常之外,当您将毫秒间的差异转换回Date 时,这将出现严重错误。两个日期之间的差异作为Date 没有意义。这是一件非常糟糕的事情。
  • 什么是time1?它在哪里声明?并初始化?
  • 向我们展示完整的堆栈跟踪。

标签: java nullpointerexception time-format


【解决方案1】:

time1 在您引用它之后被初始化。从您发布的代码中可以清楚地看到。 Time2 分配给 time 但 time1 在引用之前从未初始化。

【讨论】:

  • time1 在此方法调用@jason 之前已经初始化
  • @david 显然不是,否则就不是null。 --- 如果您认为它不为空,请向我们证明。插入打印语句以在调用parse()之前打印time1time2。然后向我们展示程序输出,包括来自 NullPointerException 的完整堆栈跟踪,你说你是从你说的 time1 拥有的非空值中获得的。
  • lol 好的,这里是调试器 i.gyazo.com/8097f18a4d2d204628f863776a92546f.png 显示的变量,不管怎样,我想出了如何修复它,谢谢
  • @Andreas 你听起来很生气。
  • @david 抱歉,我要求提供打印输出和完整的堆栈跟踪。您应该编辑问题并将其添加到您的问题中,以澄清它。 --- 更好的是,编辑问题并提供Minimal, Reproducible Example
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2023-01-26
  • 2014-01-18
  • 1970-01-01
相关资源
最近更新 更多