微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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(); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐