package cn.sxt.game;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
/**
* 飞机游戏的主窗口
* @author 陈洁
*
*/
public class MyGameFrame extends JFrame {
Image bg=GameUtil.getImage("images/bg.jpg");
Image planeImg=GameUtil.getImage("images/plane.png");
Plane plane=new Plane(planeImg, 250, 250);
Shell[] shells=new Shell[50];
@Override
public void paint(Graphics g) {
g.drawImage(bg,0,0,null);
plane.drawSelf(g);
for(int i=0;i<shells.length;i++){
shells[i].draw(g);
}
}
//帮助我们反复的重画窗口
class PaintThread extends Thread{
public void run(){
while(true){
repaint();
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//定义键盘监听的内部类
class KeyMonitor extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
plane.addDirection(e);
}
@Override
public void keyReleased(KeyEvent e) {
plane.minusDirection(e);
}
}
public void launchFrame(){
this.setTitle("尚学堂学员_程序猿作品");
this.setVisible(true);//默认不可见,true 可见
this.setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);//窗口大小
this.setLocation(300, 200);
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
new PaintThread().start();
addKeyListener(new KeyMonitor());//给窗口增加键盘的监听
//初始化50个炮弹
for(int i=0;i<shells.length;i++){
shells[i]=new Shell();
}
}
public static void main(String[] arge){
MyGameFrame f=new MyGameFrame();
f.launchFrame();
}
}
我运行之后 可以运行,但是下面有提示:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at cn.sxt.game.MyGameFrame.paint(MyGameFrame.java:30)
at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
这个是怎么回事??