【问题标题】:Calling class function from another class. Error从另一个类调用类函数。错误
【发布时间】:2012-05-12 17:53:27
【问题描述】:

简化: 两班。 X 和 Y。

Y 扩展 X。

我在 X 中调用:

    Y periodic;

然后在 X 中调用 Y 的函数之一:

periodic.conditionDepreciate();

Y中的实际功能块是:

    public void conditionDepreciate() {
    ActionListener conditionDepreciation = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
              if (ameba.health > 0) {
                  ameba.health -= 1;
              }
        }
    };
        new Timer(conditionDelayCount * 1000, conditionDepreciation).start();
}

但无论函数是什么,我都会收到来自 X 文件的错误消息:

线程“main”中的异常 java.lang.NullPointerException
在 X.(X.java:71)
在 X.main(X.java:245)

第 71 行指的是当我调用时:

periodic.conditionDepreciate();

有人可以帮忙解释一下这个错误吗?

编辑:

我希望 X 调用 Y 的各种函数。基本上,它们都是周期性事件计时器。

我最初在 X 类文件中有计时器,但为了提高可读性,我移到了它自己的类文件中。

我不确定这样的东西需要用什么来初始化... Y 扩展 X 所以它应该从 X 中获取所有值? (我认为...)

我在上面发布了一个计时器函数 - 我需要告诉 Y 类文件 ameba.health 是什么吗?或者 ?我想我只需要查找函数和类>.>

【问题讨论】:

    标签: java function nullpointerexception extends


    【解决方案1】:

    periodic 引用似乎有问题,因为您从不创建对象,例如

    Y periodic = new Y();
    

    【讨论】:

    • 谢谢,我确实忘记添加这个,但我没有正确设置我的 Y 类,所以看来我还有另一个问题。
    【解决方案2】:

    大概periodic 的值为空。这是静态/实例字段的默认设置。您需要先为其分配一个非空引用,然后才能通过它调用方法。我们没有足够的信息来说明periodic 应该 的值是什么——你是应该在某处创建一个新实例,还是使用现有的实例——但是在空引用上调用一个方法会给NullPointerException...

    如果您告诉我们更多关于您期望调用哪个实例的方法,我们可能会提供进一步的帮助。

    请注意,Y 扩展 X 的事实在这里无关紧要。

    【讨论】:

    • 谢谢,但我需要再次研究课程的基础知识......我添加了我想要它做的事情,但我不确定你需要提供什么信息详细的帮助。
    • @H.B.:你肯定需要回去修改基础知识。您需要一个 Y 的实例。不清楚为什么您认为仅仅因为 Y 从 X 扩展而来,您就会通过声明 Y 类型的变量而得到一个非空引用。想想您对Y 中的哪个实例感兴趣。
    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2016-04-06
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多