【问题标题】:Help with java array nullpointerexceptionjava数组空指针异常的帮助
【发布时间】:2010-11-22 19:17:37
【问题描述】:

在尝试从任何数组(封装在 Vector 中)获取字符串时,我不断收到 NullPointerException。我似乎无法阻止错误的发生。它必须是一些简单的东西,但是我认为我已经看它太久了,我肯定可以用另一双眼睛。这是我的代码:

 Vector<Event> details = vector.get(i).getEvent();

 for (int x = 0; x < details.size(); x++) {
      Event eDetails = details.get(x);

      person = eDetails.getEventPerson();
      place = eDetails.getEventPlace()[0];
      time = eDetails.getEventTime()[0];

 }

因此,当我尝试获取从 eDetails.getEventTime 返回的数组中位置 0 处的项目(当 x 为 0 时)时,会引发 NullPointerException。

现在,当 x 为 0 时,我碰巧知道 getEventTime() 数组位置 0 处的数组元素是一个空字符串,但它不是空值。当 x 为 1 或 2 等时,我可以很好地检索时间。

问题是当我尝试执行以下操作时仍然会收到 NullPointerException:

 **System.out.println(eDetails.getEventTime.length);**

 or

 String result;

 **if(eDetails.getEventTime[0] == null){**
      result = "";
 } else {
      result = eDetails.getEventTime[0];
 }

有什么想法吗?

谢谢!

【问题讨论】:

  • 我假设您的第二个代码块中的意思是getEventTime()[0]?此外,您并没有真正展示如何填充对象。
  • @Jeremy 它应该是getEventTime()[0] 因为getEventTime[0] 不会编译(方法不是数组)。
  • @extraneon -- 我知道,这就是我假设的原因。我只是想与 OP 澄清一下。但是,如果 OP 有一个公共实例变量 getEventTime,但不太可能呢?

标签: java arrays nullpointerexception


【解决方案1】:

你确定在你的第二个例子中,它不应该是:

if(eDetails.getEventTime() == null)

代替:

if(eDetails.getEventTime[0] == null)

您是否确保在进行空值检查时关闭[0]

如果函数eDetails.getEventTime()返回null,那么当你尝试执行eDetails.getEventTime()[0];时,你会得到一个NullPointerException

【讨论】:

    【解决方案2】:

    似乎当您获得details.get(0).getEventTime() 时,返回的数组为空。

    【讨论】:

    • 也可以是返回 null 的 details.get(0).getEventPlace(),因为它也返回一个数组(或 null)。
    【解决方案3】:

    解决这个问题的最简单方法是:

    Vector<Event> details = vector.get(i).getEvent();
    
     for (int x = 0; x < details.size(); x++) {
          Event eDetails = details.get(x);
          if (eDetails == null) {
              throw new NullPointerException("eDetails on pos " + x + " is null");
          }
    
          person = eDetails.getEventPerson();
          Something[] places = Details.getEventPlace();
          if (places == null) {
              throw ....
          }
          place = eDetails.getEventPlace()[0];
    
          Something[] times =  eDetails.getEventTime();
          if (times == null) {
              throw ....
          }
          time = eDetails.getEventTime()[0];
     }
    

    它可能看起来不太好,但至少它的信息量很大。

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      相关资源
      最近更新 更多