我的最后一个项目(也是最大的项目:)是乒乓球游戏。我正在尝试实现"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 (只有两个超链接,防止垃圾邮件)
代码写得不是很好,我希望你不会去(get?)盲人:)
欢迎光临,禤浩焯
发布于 2012-07-07 23:49:56
你得了竞赛症。
当您调用Ball构造函数时,它会立即调用movement(),它会调度有问题的代码(诚然是在不同的线程中)。在分配Main.player之前,所有这些都发生在Main构造函数的中间。所以在这里的movement()行中:
if(main.player.intersects(main.ball) && hitP == false){...如果计时器线程启动得足够快,main.player仍然为null,因此main.player.intersects调用抛出异常。(main.ball也是空的,但这实际上并不会导致您看到的问题。不过,这仍然是一个问题。)
以下是需要学习的几个经验:
Main作为程序的入口点是很好的,但是创建一个Main类型的对象对我来说听起来非常可疑。什么是Main?你将如何描述它?Ball应该扩展Thread (您说implements Runnable,但在与true或false的Ball)run()方法-编写if (foo)而不是D30和D31,而不是像我之前的评论所说的那样有意义地使用变量名,在具有名为p的Player变量的同一个类中调用Rectangle变量player是在自找麻烦中引入各种微妙的问题
发布于 2012-07-07 23:49:56
在代码中,在第17行调用ball.movement()之后,在第18行为main赋一个非空值。
发布于 2012-07-07 23:52:52
这一行:主行18中的player = new Rectangle(p.getX(), p.getY(), 10, 50);必须在主行15中的b = new Ball(this);之前。否则,当您调用移动时,播放器为空。
https://stackoverflow.com/questions/11376391
复制相似问题