创建Frame对象引用时出现空指针异常

时间:2014-01-29 14:09:01

标签: java exception pointers null

我无法弄清楚为什么我会为以下代码获取NPE:

package kiboltgame;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;

public class StartingClass extends Applet implements Runnable, KeyListener {

private Robot robot;
private Image image, character;
private Graphics second;
private URL base;

    public static void main(String args[]) {
        StartingClass sc = new StartingClass();
        sc.init();
    }

@Override
public void init() {

    setSize(800, 480);
    setBackground(Color.BLACK);
    setFocusable(true);
    addKeyListener(this);
    Frame frame = (Frame) this.getParent().getParent();
    frame.setTitle("Q-Bot Alpha");
    try {
        base = getDocumentBase();
    } catch (Exception e) {
        // TODO: handle exception
    }

    // Image Setups
    character = getImage(base, "data/character.png");

}

@Override
public void start() {
    robot = new Robot();

    Thread thread = new Thread(this);
    thread.start();
}

@Override
public void stop() {
    // TODO Auto-generated method stub
}

@Override
public void destroy() {
    // TODO Auto-generated method stub
}

@Override
public void run() {
    while (true) {
        robot.update();
        repaint();
        try {
            Thread.sleep(17);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void update(Graphics g) {
    if (image == null) {
        image = createImage(this.getWidth(), this.getHeight());
        second = image.getGraphics();
    }

    second.setColor(getBackground());
    second.fillRect(0, 0, getWidth(), getHeight());
    second.setColor(getForeground());
    paint(second);

    g.drawImage(image, 0, 0, this);

}

@Override
public void paint(Graphics g) {
    g.drawImage(character, robot.getCenterX() - 61, robot.getCenterY() - 63, this);

}

@Override
public void keyPressed(KeyEvent e) {

    switch (e.getKeyCode()) {
    case KeyEvent.VK_UP:
        System.out.println("Move up");
        break;

    case KeyEvent.VK_DOWN:
        System.out.println("Move down");
        break;

    case KeyEvent.VK_LEFT:
        robot.moveLeft();
        break;

    case KeyEvent.VK_RIGHT:
        robot.moveRight();
        break;

    case KeyEvent.VK_SPACE:
        System.out.println("Jump");
        robot.jump();
        break;

    }

}

@Override
public void keyReleased(KeyEvent e) {
    switch (e.getKeyCode()) {
    case KeyEvent.VK_UP:
        System.out.println("Stop moving up");
        break;

    case KeyEvent.VK_DOWN:
        System.out.println("Stop moving down");
        break;

    case KeyEvent.VK_LEFT:
        robot.stop();
        break;

    case KeyEvent.VK_RIGHT:
        robot.stop();
        break;

    case KeyEvent.VK_SPACE:
        System.out.println("Stop jumping");
        break;

    }

}

@Override
public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub

}

}

局部变量“frame”显然会发生异常。

我是Java新手,我正在密切关注Kilobolt.com上的Android游戏教程,但即使在编译网站上提供的参考代码后,我也会收到相同的异常。我也在使用Netbeans来编写和运行所有内容。另外,我只尝试了一次调用getParent()但得到了相同的NPE。

任何帮助都会非常感激,因为我已经暂时停留了一段时间。

0 个答案:

没有答案
相关问题