java.lang.NullPointerException在multithreading程序中

这是代码

import java.applet.Applet; import java.awt.Color;` import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @SuppressWarnings("serial") public class Pong extends Applet implements Runnable,KeyListener{ final int width = 700,height = 500; public static int score = 0; Thread thread; HumanPaddle p1; Ball b1; public void init(){ this.resize(width,height); this.addKeyListener(this); thread = new Thread(this); thread.start(); p1 = new HumanPaddle(1); b1 = new Ball(); } public void paint(Graphics g){ g.setColor(Color.black); g.fillRect(0,width,height); p1.draw(g); b1.draw(g); g.setColor(Color.red); g.drawString("score: " + Integer.toString(score),width/2 - 20,10); } public void update(Graphics g){ paint(g); } public void run() { for(;;){ p1.move(); b1.move(); b1.paddleCollision(p1,p1); if(b1.getX() > width + 10){score++; }else if(b1.getX() < -10){score--;} repaint(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printstacktrace(); } } } public void keypressed(KeyEvent key) { if(key.getKeyCode() == KeyEvent.VK_UP || key.getKeyCode() == KeyEvent.VK_W){ p1.setUpAccel(true); }else if(key.getKeyCode() == KeyEvent.VK_DOWN || key.getKeyCode() == KeyEvent.VK_S){ p1.setDownAccel(true); } } public void keyreleased(KeyEvent key) { if(key.getKeyCode() == KeyEvent.VK_UP || key.getKeyCode() == KeyEvent.VK_W){ p1.setUpAccel(false); }else if(key.getKeyCode() == KeyEvent.VK_DOWN || key.getKeyCode() == KeyEvent.VK_S){ p1.setDownAccel(false); } } public void keyTyped(KeyEvent key) { } }

有时候,有时候,代码会失败并显示出来

“线程中的exception”“线程3”java.lang.NullPointerException在Pong.run(Pong.java:48)在java.lang.Thread.run(未知源)“

我知道这意味着第48行第48行有一个错误:“p1.move();”

在数据中心的Linux服务器上使用Java 1.6的AWT库

什么是AWT开发最好的Eclipse插件

System.exit在Linux上不是线程安全的吗?

如何解决在Linux上的Jenkins中的java.awt.HeadlessException

MouseWheelListener java-可能检测出边框?

并没有意义,因为这是一个有效的方法,只有有时失败…

请,我需要快速帮助…提前谢谢你。

假X11显示器?

Java Awt Robot改变Windows鼠标速度

复制到全局剪贴板不适用于Ubuntu中的Java

AWT的GraphicsConfiguration.getBounds()不适用于Windows 10

使用java.awt.Toolkit捕获全局按键

你有一个竞争条件。 因为在p1初始化之前,你在init()中启动你的线程,所以你有可能在init初始化之前运行该线程可能运行的风险。 您只需将p1和b1的初始化移动到线程启动之前:

... p1 = new HumanPaddle(1); b1 = new Ball(); thread = new Thread(this); thread.start(); }

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...