Java HashMap 空指针异常怎么处理

FishingProgrammer 2018-02-02 09:00:46
package indi.fishing.PlaneGame.PlaneGamev1;
/**
* 作者:fishing
* 创作时间:2018/1/17
* 更新日期:2018/1/28
*
*/

import javax.imageio.ImageIO;
import javax.swing.*;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;

@SuppressWarnings("serial")
public class PlaneGame extends JFrame {
/**
* 作者:fishing
* 窗口
*/
public static void main(String[] args) throws IOException{
new PlaneGame();
}

//找到游戏的资源目录
public static String path1 = System.getProperty("user.dir")+"\\File\\indi\\fishing\\PlaneGame\\photos";
//存储图片文件
public static HashMap<String,BufferedImage> maps1 = new HashMap<>();
//加载游戏资源
static{
//拿到该目录下面所有的文件
File[] files1 = new File(path1).listFiles();
for (int i = 0; i < files1.length; i++){
//保存起来
try {
maps1.put(files1[i].getName(),ImageIO.read(files1[i]));
} catch (IOException e) {
e.printStackTrace();
}
//System.out.println(files[i].getName());
}
}
/*创建一个构造方法*/
PlaneGameClassOne jp;
public PlaneGame(){
//设置标题
this.setTitle("fishing 打飞机v1");
//设置窗口居中
// this.setLocationRelativeTo(null);
//点击x结束运行
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体大小
this.setSize(640, 700);
//设置窗口不可改动大小
this.setResizable(false);
//创建一个小面板
PlaneGameClassOne jp = new PlaneGameClassOne();
this.setContentPane(jp);
this.addKeyListener(new KeyListener());
//设置窗口可见
this.setVisible(true);
}
/**添加一个适配器*/
class KeyListener extends KeyAdapter{
public void keyPressed(KeyEvent ex) {
jp.keyPressed(ex);
}
}
}
/**
* 作者:fishing
* 容器
*/

@SuppressWarnings("serial")
class PlaneGameClassOne extends JPanel { //throws NullPointerException

/*按下键盘*/
public void keyPressed(KeyEvent e) throws NullPointerException{
//键码值
try {
if(e.getKeyCode() == KeyEvent.VK_W){
planePoint.y -= 10;
}if(e.getKeyCode() == KeyEvent.VK_S){
planePoint.y += 10;
}if(e.getKeyCode() == KeyEvent.VK_A){
planePoint.x -= 10;
}if(e.getKeyCode() == KeyEvent.VK_D){
planePoint.x += 10;
}
}catch(NullPointerException ex) {
ex.printStackTrace();
}
repaint();
}

/*初始化坐标*/
//背景坐标
Point bgPoint = new Point(0, 0);
//飞机坐标
Point planePoint = new Point(270, 550);
//启动线程
public PlaneGameClassOne() {
new Thread(new BgThread()).start();
}
@Override
public void paint(Graphics g){
//重叠
super.paint(g);

//创建一个绘制容器
BufferedImage image = new BufferedImage(640, 700, BufferedImage.TYPE_INT_RGB);
//创建一个画笔
Graphics2D gs = image.createGraphics();
//绘制背景
gs.drawImage(PlaneGame.maps1.get("city.jpg"), bgPoint.x, bgPoint.y, this);
gs.drawImage(PlaneGame.maps1.get("city.jpg"), bgPoint.x, bgPoint.y-715, this);
//绘制飞机
gs.drawImage(PlaneGame.maps1.get("plane.jpg"), planePoint.x, planePoint.y, this);

//更新画板
g.drawImage(image, 0, 0, this);

}
class BgThread implements Runnable{

@Override
public void run() {
while (true) {
if(bgPoint.y == 700) {
bgPoint.y = -15;
}
bgPoint.y += 1;
try {
Thread.sleep(10);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
repaint();
}
}
}
}

异常:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at indi.fishing.PlaneGame.PlaneGamev1.PlaneGame$KeyListener.keyPressed(PlaneGame.java:73)
at java.awt.Component.processKeyEvent(Component.java:6491)
at java.awt.Component.processEvent(Component.java:6310)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Window.processEvent(Window.java:2025)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4760)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
...全文
1062 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
FishingProgrammer 2018-02-02
  • 打赏
  • 举报
回复
图片都有的,但是一按键盘就报一遍错

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧