java.lang.NullPointerException但对象不为空(我想) - java

我的最后一个项目(也是最大的:))是乒乓球游戏。
我正在尝试实现“ AI”,但是由于以下原因我无法执行此操作

Exception in thread "Timer-0" java.lang.NullPointerException
    at main.Ball$1.run(Ball.java:25)
    at java.util.TimerThread.mainLoop(Unknown Source)
    at java.util.TimerThread.run(Unknown Source)

我认为我已经编写了完整的代码,但是一定有问题。

Main.java-
http://pastebin.com/nvHwQAFD

Ball.java-
http://pastebin.com/cgE5r5eW

Player.java-pastebin.com/7QeiNciz

Ai.java-pastebin.com/xsGhJ7Zb(仅两个超链接,可防止垃圾邮件)

该代码的编写风格不佳,希望您不要盲目:)

问候,
阿德里安

参考方案

您有比赛条件。

当您调用Ball构造函数时,该函数立即调用movement(),它调度有问题的代码(诚然在另一个线程中)。所有这些都在分配Main之前在Main.player构造函数的中间发生。因此,在movement()行中:

if(main.player.intersects(main.ball) && hitP == false){

...如果计时器线程启动得足够快,则main.player仍为null,因此main.player.intersects调用将引发异常。 (main.ball也是空的,但这实际上并不会导致您遇到的问题。但这仍然是一个问题。)

一些要学习的课程:

在构造函数中不要做太多
理想情况下,请尝试避免创建这种周期性引用,或者,如果您必须拥有一个此类,请在开始进行实际工作之前确保所有内容都已初始化
使您的类名称更有意义:Main可以很好地用作程序的入口点,但是创建类型为Main的对象对我来说似乎非常可疑。什么是Main?您如何形容?
不要滥用继承-没有理由Ball扩展Thread(您说implements Runnable但您自己没有在run()中提供Ball方法)
避免与truefalse进行比较-用if (foo)代替if (foo == true)if (!foo)代替if (foo == false)
使您的变量名称有意义-根据我之前的评论,在您拥有名为Rectangleplayer变量的同一类中调用Player变量p会引起麻烦
将所有变量设为私有,必要时通过属性将其公开。 (除非您确实需要,否则请不要暴露它们)
缩进很重要-正确缩进代码可使其更易于阅读
在您真正熟悉该语言的基础之前,请​​避免使用线程化-这很困难,并且可能会引入各种细微的问题

java.lang.reflect.Method中的“ 4161”修饰符是什么意思 - java

我正在使用Java反射来获取使用特定Annotation进行注释的方法。它返回两个方法,一个带有修饰符4161的方法属于该接口。但是我检查了修改器的规格,在任何地方都找不到它...需要帮助,tks :) 参考方案 modifiers整数基本上是形成位字段的整数标志的组合。您可以使用静态Modifier.toString()方法获取文本表示形式。如果使用此方法…

java.lang.ArrayIndexOutOfBoundsException:使用并行流将元素添加到List时 - java

我正在努力优化csv文件的某些处理,因此试图加速某些Jackson的实现。所以我有:List<T> testResults=new ArrayList(); Stream<T> testStream= Streams.stream(TestIterator); testStream.parallel().forEach(p->t…

Java:线程主java.lang.NoClassDefFoundError中的异常 - java

我正在尝试使Red5 Flash Media Server在我的计算机上工作。我已经安装了它,但是在运行服务器时出现此错误:- Exception in thread "main" java.lang.NoClassDefFoundError: org/red5/server/Bootstrap Caused by: java.lang.…

不兼容的类型:java.lang.Object无法转换为T - java

这是我的代码:package datastructures; import java.util.Iterator; public class Stack<T>{ private class Node<T>{ T data; Node next; } private int size; private Node head; privat…

无法解析类型java.lang.CharSequence。从所需的.class文件间接引用它 - java

尝试从GitHub编译某些项目时,遇到以下错误The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files 如果我没有记错的话,这是来自基本JDK的课程。怎么会无法到达? 参考方案 如上面@ hajo-the…