什么是挂起异常NullPointerException(帖子中出现完整错误),我该如何解决

红眼草人

我没有使用任何外部库,而是在尝试解决以下错误:

游戏(4)[Java应用程序]
com.pipelinegaming.pixelproblem.Game在本地主机:50673
线程[AWT-EventQueue-0](运行)
线程[Display](挂起(NullPointerException异常))
Sprite.load()行:25
Sprite 。(int,int,int,SpriteSheet)行:18
Sprite。()行:9 Screen.render()行:
40
Game.render()行:137
Game.run()行:97
Thread.run()行:745
线程[DestroyJavaVM](正在运行)

/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java
(2015年5月10日,下午3:11:03)

游戏类别:

package com.pipelinegaming.pixelproblem;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;

import javax.swing.JFrame;

import com.pipelinegaming.pixelproblem.graphics.Screen;
import com.pipelinegaming.pixelproblem.input.Keyboard;

@SuppressWarnings("unused")
public class Game extends Canvas implements Runnable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public static int width = 300;
    public static int height = width /16 * 9;
    public static int scale = 3;
    public static String title = "Pixel Problem";
    private Keyboard key;
    private Screen screen;
    private Thread thread;
    private boolean running = false;
    private JFrame frame;
    private BufferedImage image = new BufferedImage(width, height,               
    BufferedImage.TYPE_INT_RGB);  
    private int[] pixels =    
    ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
    public Game() {
        screen = new Screen(width, height);
        frame = new JFrame();

        Dimension size = new Dimension(width * scale, height * scale);
        setPreferredSize(size);
        key = new Keyboard();
        frame.addKeyListener(key);
    }
    public synchronized void start() {

        running = true;
        thread = new Thread(this, "Display");
        thread.start();










    }
    public synchronized void stop(){
        running = false;

        try{

            thread.join();

        }catch(InterruptedException e){

            e.printStackTrace();


        }




    }
    public void run(){
        long lastTime = System.nanoTime();
            long sec = System.currentTimeMillis();
            final double ns = 1000000000.0 / 60.0;
            double delta = 0;
            int frames = 0;
            int ticks = 0;
            while (running) {
                long now = System.nanoTime();
                delta = delta + (now - lastTime) / ns;
                lastTime = now;
                while(delta >= 1) {

                    tick();
                    ticks++;
                    delta--;



                }

                render();
                frames++;
                if(System.currentTimeMillis() - sec > 1000) {
                    sec += 1000;
                    frame.setTitle(title + "        |       " + "Tps: " + ticks + " Fps: " + frames);
                    ticks = 0;
                    frames = 0;

                }
            }
            stop();
        }
    public void tick() {
        key.update();






    }
    public void render() {
        BufferStrategy buffer = getBufferStrategy();
        if(buffer == null){

            createBufferStrategy(3);
            return;

        }
        for(int i = 0; i < pixels.length; i++){


            pixels[i] = screen.pixels[i];


        }
        Graphics g = buffer.getDrawGraphics();
        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);

        screen.clear();
        screen.render();






        g.dispose();
        buffer.show();
    }
    public static void main(String[] args) {
        Game game = new Game();
        game.frame.setResizable(false);
        game.frame.setTitle(Game.title);
        game.frame.add(game);
        game.frame.pack();
        game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        game.frame.setLocationRelativeTo(null);
        game.frame.setVisible(true);
        game.start();

    }
}

屏幕类别:

package com.pipelinegaming.pixelproblem.graphics;

import java.util.Random;

public class Screen {
private int height, width;
public int [] pixels;
public final int MAP_SIZE = 8;
public final int MAP_SIZE_MASK = MAP_SIZE - 1;
int [] tiles = new int[MAP_SIZE * MAP_SIZE];
public Screen(int width, int height) {
    this.width = width;
    this.height = height;
    pixels = new int [width * height];

    Random random = new Random();
    for (int i = 0; i < MAP_SIZE * MAP_SIZE; i++){
        tiles [i] = random.nextInt(0xffffff);


    }

}
public void clear() {

    for(int i = 1; i < 64 * 64; i++){
        pixels[i] = 0;



    }



}
public void render() {

    for (int y = 0; y < height; y++){
        for(int x = 0; x < width; x++){
            pixels[x+y*width] = Sprite.main_page_background.pixels[(x & 15) +      
 (y & 15) * Sprite.main_page_background.SIZE];




        }




    }


   }
   }

键盘类别(未使用):

package com.pipelinegaming.pixelproblem.input;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Keyboard implements KeyListener{
private boolean [] keys = new boolean[120];
public boolean up, down, left, right;

public void update() {
    left = keys[KeyEvent.VK_LEFT] || keys[KeyEvent.VK_A];
    right = keys[KeyEvent.VK_RIGHT] || keys[KeyEvent.VK_D];
    up = keys[KeyEvent.VK_UP] || keys[KeyEvent.VK_W];
    down = keys[KeyEvent.VK_DOWN] || keys[KeyEvent.VK_S];
    for (int i = 0; i < keys.length; i++){
        if(keys[i]) {
        System.out.println("Key: " + i);
        }



    }
}


public void keyTyped(KeyEvent e) {


}


public void keyPressed(KeyEvent e) {

    keys[e.getKeyCode()] = true;

}


public void keyReleased(KeyEvent e) {
    keys[e.getKeyCode()] = false;

}





























}

SpriteSheet类别:

package com.pipelinegaming.pixelproblem.graphics;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

public class SpriteSheet {
public String path;
public final int SIZE;
public int[] pixels;
public static SpriteSheet all = new     
SpriteSheet("/textures/AllSpriteSheet.png", 256);
public SpriteSheet(String path, int size){
    this.path = path;
    SIZE = size;
    pixels = new int[SIZE * SIZE];
    load();



}
private void load() {
    try {
        BufferedImage image =   
ImageIO.read(SpriteSheet.class.getResource(path));
        int w = image.getWidth();
        int h = image.getHeight();
        image.getRGB(0, 0, w, h, pixels, 0, w);
    } catch (IOException e) {

        e.printStackTrace();
    }






}









}

精灵类:

package com.pipelinegaming.pixelproblem.graphics;

public class Sprite {
public final int SIZE;
public int x, y;
public int [] pixels;
public SpriteSheet sheet;

public static Sprite main_page_background = new Sprite(16, 0, 1,      
SpriteSheet.all);


public Sprite (int size, int x, int y, SpriteSheet sheet){

    SIZE = size;
    pixels = new int [SIZE * SIZE];
    this.x = x * size;
    this.y = y * size;
    load();



}
private void load(){
    for (int x = 0; x < SIZE; x++){
        pixels[x + y * SIZE] = sheet.pixels[(x + this.x) + (y + this.y) *   
sheet.SIZE];






    }




}


}

我是Java编程的初学者,但是了解其他一些语言,如果有人可以帮助我,我会非常感激。

科里·霍夫曼

我相信NullPointerException是由Sprite类中的行引起的:

pixels[x + y * SIZE] = sheet.pixels[(x + this.x) + (y + this.y) *   
sheet.SIZE];

因为您正在尝试在sheet.pixels[x + y * SIZE]初始化对象之前引用“工作表”()中的属性。

您可以通过将工作表值从构造函数传递到load()或使用给定值初始化工作表对象来解决此问题,如下所示:

this.y = y * size;
load();

成为:

this.y = y * size;
this.sheet = sheet;
load();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么会出现此错误,我该如何解决?迅速

来自分类Dev

我该如何解决错误:预期出现缩进块

来自分类Dev

“java.lang.NullPointerException”错误(错误详情,文章中有)我该如何解决?

来自分类Dev

我该如何解决细分错误?

来自分类Dev

什么是NoSuchBeanDefinitionException,我该如何解决?

来自分类Dev

为什么这种相互递归的数据定义不完整,我该如何解决?

来自分类Dev

我如何解决此问题--->下面的代码中出现错误HTTP状态404

来自分类Dev

尝试从文本文件中删除行时出现异常。我该如何解决?

来自分类Dev

我的pygame游戏由于出现错误而无法启动,我该如何解决?

来自分类Dev

我的 WordPress 插件出现错误 Revolution Slider,我该如何解决?

来自分类Dev

试图在 Spring 控制器中接收 JSON 以获取帖子,但它以 null 形式出现,我该如何解决?

来自分类Dev

尝试创建Grads脚本并出现错误“语句的预期结尾”,我该如何解决?

来自分类Dev

出现错误“不存在Java运行时”,我该如何解决?

来自分类Dev

使用fgetc()时出现细分错误。我该如何解决?

来自分类Dev

在 for 循环中运行 scanf 时出现逻辑错误,我该如何解决?

来自分类Dev

在构建 angular-6 应用程序时出现此错误,我该如何解决?

来自分类Dev

我该如何解决该错误?[覆盖/ libgstreamer]

来自分类Dev

为什么会出现“应用程序不带参数”的提示,我该如何解决?

来自分类Dev

Visual Studio表现异常。我该如何解决?

来自分类Dev

我该如何解决此逻辑错误?代码有什么错误?

来自分类Dev

为什么我得到了错误的输出,我该如何解决这个问题?

来自分类Dev

更改DESFire主密钥时出现0x1E错误(INTEGRITY_ERROR),我有什么错误?该如何解决?

来自分类Dev

更改DESFire主密钥时出现0x1E错误(INTEGRITY_ERROR),我有什么错误?该如何解决?

来自分类Dev

mongodb错误。我该如何解决mongoDB中的错误?

来自分类Dev

我该如何解决我的构建错误?

来自分类Dev

我该如何解决“ [错误]使用不完整类型'class SLLNode'的无效”链接列表

来自分类Dev

在编程c#时出现此错误:“线程不是用户挂起的;无法恢复。” 它是什么?如何解决?

来自分类Dev

为什么此代码有“内联文件中的EOF”错误,我该如何解决?

来自分类Dev

为什么我在初始化字母时遇到错误,该如何解决?

Related 相关文章

  1. 1

    为什么会出现此错误,我该如何解决?迅速

  2. 2

    我该如何解决错误:预期出现缩进块

  3. 3

    “java.lang.NullPointerException”错误(错误详情,文章中有)我该如何解决?

  4. 4

    我该如何解决细分错误?

  5. 5

    什么是NoSuchBeanDefinitionException,我该如何解决?

  6. 6

    为什么这种相互递归的数据定义不完整,我该如何解决?

  7. 7

    我如何解决此问题--->下面的代码中出现错误HTTP状态404

  8. 8

    尝试从文本文件中删除行时出现异常。我该如何解决?

  9. 9

    我的pygame游戏由于出现错误而无法启动,我该如何解决?

  10. 10

    我的 WordPress 插件出现错误 Revolution Slider,我该如何解决?

  11. 11

    试图在 Spring 控制器中接收 JSON 以获取帖子,但它以 null 形式出现,我该如何解决?

  12. 12

    尝试创建Grads脚本并出现错误“语句的预期结尾”,我该如何解决?

  13. 13

    出现错误“不存在Java运行时”,我该如何解决?

  14. 14

    使用fgetc()时出现细分错误。我该如何解决?

  15. 15

    在 for 循环中运行 scanf 时出现逻辑错误,我该如何解决?

  16. 16

    在构建 angular-6 应用程序时出现此错误,我该如何解决?

  17. 17

    我该如何解决该错误?[覆盖/ libgstreamer]

  18. 18

    为什么会出现“应用程序不带参数”的提示,我该如何解决?

  19. 19

    Visual Studio表现异常。我该如何解决?

  20. 20

    我该如何解决此逻辑错误?代码有什么错误?

  21. 21

    为什么我得到了错误的输出,我该如何解决这个问题?

  22. 22

    更改DESFire主密钥时出现0x1E错误(INTEGRITY_ERROR),我有什么错误?该如何解决?

  23. 23

    更改DESFire主密钥时出现0x1E错误(INTEGRITY_ERROR),我有什么错误?该如何解决?

  24. 24

    mongodb错误。我该如何解决mongoDB中的错误?

  25. 25

    我该如何解决我的构建错误?

  26. 26

    我该如何解决“ [错误]使用不完整类型'class SLLNode'的无效”链接列表

  27. 27

    在编程c#时出现此错误:“线程不是用户挂起的;无法恢复。” 它是什么?如何解决?

  28. 28

    为什么此代码有“内联文件中的EOF”错误,我该如何解决?

  29. 29

    为什么我在初始化字母时遇到错误,该如何解决?

热门标签

归档