1

如果在其他地方以某种方式回答了这个问题,我深表歉意,但是我对 Java 的了解还不够,无法从其他情况中识别出类似的问题。

在这里获取所有信息可能很困难,因此我将尝试获取要点。

我正在编写一个日历程序,当我在演示类中调用构造函数时:

        System.out.println("Enter month (1 - 12)");
    month = console.nextInt();

    System.out.println("Enter year (> 1500)");
    year = console.nextInt();

    Calendar myCalendar = new Calendar(month, year);

我在调用构造函数的那一行得到一个空指针异常。我也在构造函数本身的第一个函数调用中得到一个:

    public Calendar(int m, int y)
{
    firstDate.setDate(m, 1, y);
    firstDayOfMonth();
}

setDate 方法调用中的第二个数字是 1,因为我使用的是我已经编写的日期类,而对于日历,只需要月份和年份,因此我将日期设置为 1。

在那之后,我的错误消息对我来说变得不那么容易理解了,如下所示:

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

我正在使用 DrJava 来执行此操作,如果这有什么不同的话。如果有人可以帮助我了解发生了什么,以便我可以解决问题,那就太好了。我知道这里可能没有足够的信息来提供实际的解决方案,但是如果我了解发生了什么,我可能会通过一些额外的研究来弄清楚。我知道当使用尚未初始化的参数调用函数时会发生空指针异常,但是通过我的代码回溯,在方法调用之后,我找不到任何未在任何地方定义的东西。我认为那些其他错误消息将帮助我知道空指针的来源。

在此先感谢,如果我在这里违反了某些规则,我们深表歉意。

Edit1:我初始化 firstDate 如下:`private ExtDate firstDate;' 我会尝试那些 Print 语句,也许这会有所帮助。

Edit2:好吧,我想我明白了。谢谢您的帮助。学习过程等等。

4

1 回答 1

4

NullPointerException发生,当你在null某个地方使用时,你应该使用一个对象。(有关更多详细信息,请参阅参考资料)。

简而言之:在您的代码中的某处,您有一个空引用而不是一个对象。您之前可能没有初始化它,这就是您遇到异常的原因。

关于您的错误陈述,该对象可能是firstDate. 您可以在System.out.println(firstDate);通话前通过firstDate.setDate(m, 1, y);通话进行检查。可能它会打印出来null

于 2013-02-24T22:32:02.187 回答