运行程序时出现java.lang.NullPointerException - java

我有4节课。一个是抽象实体类,一个是球类,一个是主类,另一个是屏幕类。

球类扩展了实体类,并具有5​​个变量。

屏幕功能具有绘制方法:

public void paint(Graphics g){
    super.paint(g);
    ball.paint(g);
}

当然,要使用ball.paint,需要为其创建一个对象。因此,我将球对象:

Ball ball;

然后将其添加到屏幕构造函数中,因为我需要这样做(Ball有一个接受5个变量的构造函数):

public Screen(){
    ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX());
}

这没有任何错误,但是当我运行程序时,我在控制台中收到此错误:

Exception in thread "main" java.lang.NullPointerException
at h3x.engine.gfx.Screen.<init>(Screen.java:18)
at h3x.engine.Main.main(Main.java:16)

主类的第16行是这样的:

frame.add(new Screen());

...屏幕类的第18行是这样的:

ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX());

所以我的问题是,为什么会这样,我该如何解决。如果需要,我可以将整个代码放在类中。

谢谢!

java大神给出的解决方案

您致电:

ball = new Ball(ball.getXxx()....)

这意味着您希望从初始化的实例中检索值。在初始化完成之前,它为null。因此是NPE(NullPointerException的缩写)。

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

如何修改休眠的SQL查询? - java

我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…

用Java构建大批量数据处理工具 - java

Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。 3年前关闭。 Improve this question 我正在尝试使用Java构建ETL工具。 ETL工具用于对大量数据(关系型和其他类型)进行批量读取,…

用Java封装对象? - java

private中的Java提供类级别的封装。可以封装一个对象吗?还是这样做徒劳?例如,如果我们将一个类定义为 public class Person { private String ssn; private ArrayList<Person> friends = new ArrayList<Person>(); public voi…

光学标记阅读器的开源库 - java

Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以使为on-topic。 6年前关闭。 Improve this question 我想要一个用于光学标记读取(OMR)的开源库,有没有这样的库?我想将此库与我的Java应用程序一起使用。…