eclipse错误:我不知道为什么我在Thread 3中得到异常NullPointerException

时间:2014-07-11 17:33:02

标签: java eclipse

所以,我开始制作一个简单的2D游戏,过了一会儿,我跑了它,它给了我一些错误。

我将其运行到调试模式,它显示错误位于第105和第60行以及Thread.run()

这是我的代码:

package me.andrewc.tower;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;

import me.andrewc.tower.dy.DynamicsLoader;
import me.andrewc.tower.gfx.Screen;
import me.andrewc.tower.gfx.UI;
import me.andrewc.tower.level.Level;

public class TowerComponent extends Canvas implements Runnable {

    private static final long serialVersionUID = 1L;
    public static final int WIDTH = 640, HEIGHT = 480;
    public static final String NAME = "Autumn Hero";
    private boolean running = false;

    private Screen screen;
    private Level level;

    public TowerComponent() {
        DynamicsLoader.init(this);

        level = Level.levels.get(1);

        screen = new Screen(WIDTH, HEIGHT);
    }

    public void start() {
        running = true;
        new Thread(this).start();
    }

    public void stop() {
        running = false;
    }

    @Override
    public void run() {
        int fps = 0, tick = 0;
        double  fpsTimer = System.currentTimeMillis();

        double nsPerTick = 1000000000.0d / 60;
        double then = System.nanoTime();
        double unprocessed = 0;

        while(running) {

            boolean canRender = false;

            double now = System.nanoTime();
            unprocessed += (now - then) / nsPerTick;
            then = now;
            while(unprocessed >= 1) {
                tick++;
                tick();    // HERE !!
                canRender = true;
                --unprocessed;
            }
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(canRender) {
            fps++;
            render();
            }

            if(System.currentTimeMillis() - fpsTimer > 1000) {
                System.out.printf("%d fps, %d tick%n", fps, tick);
                    fps = 0; tick = 0;
                    fpsTimer += 1000;
            }

        }
    }

    private void render() {
        BufferStrategy bs = getBufferStrategy();
        if(bs == null) {
            createBufferStrategy(3);
            requestFocus();
            return;
        }
        Graphics g = bs.getDrawGraphics();

        //Render objects here

        UI.render(screen);
        level.render(screen);

        //Done with rendering

        g.drawImage(screen.image, 0, 0, WIDTH, HEIGHT, null);
        g.dispose();
        bs.show();
    }

    private void tick() {
        level.tick();       //HERE !!
    }

    public static void main(String[] args) {
        TowerComponent game = new TowerComponent();
        Dimension dimension = new Dimension(WIDTH, HEIGHT);
        game.setMaximumSize(dimension);
        game.setMinimumSize(dimension);
        game.setPreferredSize(dimension);
        game.setSize(dimension);

        JFrame frame = new JFrame();
        frame.setTitle(NAME);
        frame.add(game);
        frame.pack();frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        game.start();

    }
}

1 个答案:

答案 0 :(得分:-1)

Level.levels.get(1);

可能返回null