Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:查找NullPointerException_Java_Exception - Fatal编程技术网

Java:查找NullPointerException

Java:查找NullPointerException,java,exception,Java,Exception,有没有办法找出NullPointerException的来源 当然,编译器会告诉我它出现的那一行,但我不知道出了什么问题。 我希望将来能自己发现这一点 在这种情况下,我正在调用sorter.setNumbers(sortArray)其中分拣机是接口分拣机的一个实例,我在计数排序中有方法设置编号(int[]number){},它实现了分拣机 编译器错误的前几行如下 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExcepti

有没有办法找出NullPointerException的来源

当然,编译器会告诉我它出现的那一行,但我不知道出了什么问题。
我希望将来能自己发现这一点

在这种情况下,我正在调用
sorter.setNumbers(sortArray)其中
分拣机
是接口
分拣机
的一个实例,我在
计数排序
中有方法
设置编号(int[]number){}
,它实现了
分拣机

编译器错误的前几行如下

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at MyCanvas.setSortArray(MyCanvas.java:81)
    at SearchComparator$1.actionPerformed(SearchComparator.java:108)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

您的
sorter
变量可能为空,要么未设置,要么某行将其覆盖为空。

如果有

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at MyCanvas.setSortArray(MyCanvas.java:81)
那条线是

sorter.setNumbers(sortArray);
然后,
sorter
必须为
null
。这是该行中唯一一个调用对象上可以为null的方法的地方。将
null
向下传递到
setNumbers
无法在此行生成
NullPointerException

如果
sortArray
为空,并且导致
setNumbers
中出现此异常,您将在堆栈跟踪中看到它发生在那里


有两个原因可以使您获得
NullPointerException

  • 您可以明确地抛出它。例如,您确实
    抛出新的NullPointerException()
    (甚至
    抛出null
    ,这实际上会导致
    NullPointerException
    并因此抛出一个)
  • 您尝试对
    对象执行某些操作,尽管它是
    空的
第二种情况下的“做点什么”可以是

  • 调用实例方法-要查找的模式是
    canThisBeNull.something(
  • 在这里访问字段模式只是
    canThisBeNull.foo
  • 访问
    null
    数组的
    length
    属性-
    canthisaraybenull.length
  • 访问
    null
    数组的内容-
    canthisararybenull[X]
请注意“实例方法”-如果方法是
静态的
,则不会出现错误,因为您实际上没有通过对象访问该方法

你也可能有一些棘手的案例,例如,考虑:

int value = this.getValue();
不能为
null
且原语不能抛出。那么怎么会出现
null点异常
?解决方案是自动(取消)装箱:

编译器将自动将您的行转换为

int value = getValue().intValue();
要将可为
null
整数
转换为
int
。调用
null.intValue()
将导致该异常

因此,要查找
NullPointerException
,请查看
NullPointerException
堆栈跟踪中最上面的一行(向下搜索由
子句引起的所有
,直到您位于底部)


在该行中查找点。然后检查点左侧的任何内容是否可以是
null

当您调用指向null的方法时,会出现null指针异常,然后出现null指针异常

请将您的MyCanvas代码与行号一起发布当然:)这并不难。你有台词。插入println语句或停止该行并使用调试器显示该行使用的所有对象引用。只有当它们都不为空时,你才有值得向别人求助的理由。我知道。我是新手,对工具不太熟悉。我明白了。我不确定异常是在首先调用错误代码时引发的,还是在实际发生的地方引发的。这很有帮助。
int value = getValue().intValue();