2012-05-12 42 views
0

简体: 两个类。 X和Y从另一个类调用类函数。错误

ý延伸X.

在XI呼叫:

Y periodic; 

然后,在XI呼叫个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(); 
} 

Bu牛逼不管什么功能就我从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是什么?要么 ?我想我只需要查看函数和类>>

回答

2

推测periodic的值为空。这是静态/实例字段的默认值。您需要先为其分配非空引用,然后才能通过它调用方法。我们没有足够的信息来了解periodic应该是的值 - 您是否应该在某处创建新实例或使用现有的实例 - 但在空引用上调用方法将会产生NullPointerException ...

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

请注意,Y延伸X这一事实在这里并不重要。

+0

谢谢你,但我会需要寻找到类的基础知识再...我添加了我想要的功能,但我不确定需要哪些信息来提供详细的帮助。 –

+0

@ H.B .:你肯定需要回去修改基础知识。你需要一个Y的*实例*。不清楚为什么你认为仅仅因为Y从X延伸,你将通过声明一个类型为'Y'的变量来得到一个非空引用。想想看,这* *实例的'Y'你感兴趣。 –

5

似乎是periodic参考一个问题,因为你永远不创建对象,就像

Y periodic = new Y(); 
+0

谢谢你,我也忘了添加这个,但我没有设置我的Y舱正确所以会出现我有另外一个问题。 –