【问题标题】:"java.lang.NullPointerException" error“java.lang.NullPointerException”错误
【发布时间】:2013-12-19 17:48:05
【问题描述】:

我收到错误“java.lang.NullPointerException”,BlueJ 似乎无法告诉我错误的含义。以下是出现错误的代码:

public int getJobsWaiting()
{
    int count = 0;
    int i = 0;

    while (count < jobList.size())
    {
        Job temp = jobList.get(i);

        if(jobList.get(count).isCompleted() != true)
        {
            count = count + 1;
        }
        i = i + 1;
    }
    return count;
}

【问题讨论】:

  • 某事是null。当您尝试调用方法或访问null 的成员变量时,您会得到NullPointerException。异常发生在哪一行?
  • 这是一个标准的 Java 错误,表明一个对象是 null(即什么都没有)但正在尝试取消引用(使用 .)。它是否告诉您发生错误的确切行?
  • 你初始化jobList了吗?错误在哪一行?
  • 错误出现在“while (count
  • (这是题外话,与您遇到的问题无关)。您可能不应该将布尔结果与true 进行比较。表达式if (something != true) 可以更清楚地写成if (!something)

标签: java nullpointerexception bluej


【解决方案1】:

jobListjobList.get(count)null。如果您尝试在 null 上调用一个方法(在您的情况下:size()isCompleted()),您会得到一个 NullPointerException

【讨论】:

  • isCompleted() 也可能是 null(如果是 Boolean
  • @MarounMaroun,实际上可以。 if (test() != true) 将在test() 返回null 而不是盒装boolean 的情况下抛出NPE。 :)
  • @kocko 谢谢你 :) 我错过了。
【解决方案2】:

试试这个,代码少,只有jobList可以为null

int count = 0;
for (Job tmpJob : jobList) {
  if (!tmpJob.isCompleted())
  count++;
}

return count;

【讨论】:

  • 使用该代码后仍然出现“java.lang.NullPointerException”错误
【解决方案3】:

您的代码难以理解。变量 temp 从未使用过?

这样,如果一个作业完成了,count+1不会执行,while永远不会结束?

if(jobList.get(count).isCompleted() != true)
{
   count = count + 1;
}

检查这是否有帮助:

public int getJobsWaiting(List<Job> jobList) {
    int count = 0;
    for (int i = 0; i < jobList.size(); i++) {
        Job temp = jobList.get(i);
        if (temp != null && !temp.isCompleted()) {
            count++;
        }
    }
    return count;
}

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 2013-10-14
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多