java - 对象数组 - 空指针异常

标签 java

我想创建对象的二维数组,但无论我如何创建它,我都会遇到空指针异常。我应该如何制作对象数组才能使其工作?这是我的代码:

游戏.java 包 com.jakob.game1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

import java.awt.Canvas;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferStrategy;
import java.util.Random;

import javax.swing.JFrame;


public class Game extends Canvas implements Runnable, MouseMotionListener{
    private static final long serialVersionUID = 1L;

    public static final int gHeigh = 500;
    public static final int gWidth = 500;
    public static final int tHeigh = gHeigh/5;
    public static final int tWidth = gWidth/5;
    private boolean running;
    public Random random;

    public BufferStrategy b; 
    public Graphics g;
    public Image bi;

    public Pixel[][] pixel = new Pixel[tHeigh][tWidth]; 

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

    public static void main(String args[]){
        Game game = new Game();

        JFrame frame = new JFrame("Game test");
        frame.setLayout(new BorderLayout());
        frame.setBounds(0, 0, gHeigh, gWidth);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(game, BorderLayout.CENTER);
        //frame.pack();
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true); 

        game.start();
    }

    public void run() {
        bi = createImage(gHeigh, gWidth);
        g = bi.getGraphics();
        g.setColor( Color.black );
        g.fillRect( 0, 0, gHeigh, gWidth);
        g.setColor( Color.white );
        addMouseMotionListener( this );


        for(int i=0; i<tHeigh; i++){
            for(int j=0; j<tWidth; j++){
                if(pixel == null){
                    pixel[i][j] = new Pixel; //No matter what I write here it can't create this
                }
            }
        }



        if(pixel != null){
            for(int i=0; i<tHeigh; i++){
                for(int j=0; j<tWidth; j++){
                    pixel[i][j].setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)));
                }
            }
        }

        while(running){
            for(int i=0; i<tHeigh ;i++){
                for(int j=0; j<tWidth; j++){
                    paint(g, i*5, j*5);
                }
            }
        }
    }

    public void paint(Graphics g, int x, int y){
        g.setColor(pixel[x][y].getColor());
        g.fillRect(x, y, 5, 5);
    }

    public void mouseDragged(MouseEvent e) {
        g.fillRect(e.getX()-2, e.getY()-2, 4, 4);
        repaint();
        e.consume();
    }

    public void mouseMoved(MouseEvent e) {

    }

    public void update( Graphics g ) {
       g.drawImage( bi, 0, 0, this );
    }

    public void paint( Graphics g ) {
       update( g );
    }
}

像素.java

package com.jakob.game1;

import java.awt.Color;

public class Pixel {
    private Color color;

    public Pixel(){
        color = new Color( 0,0,0);
    }

    public void setColor(Color color){
        this.color = color;
    }

    public Color getColor(){
        return this.color;
    }
}

最佳答案

你尝试过吗:

if(pixel[i][j] == null){
    pixel[i][j] = new Pixel();
}

实际上,您似乎只运行此循环一次,因此这应该足够了:

    for(int i=0; i<tHeigh; i++){
        for(int j=0; j<tWidth; j++){
            pixel[i][j] = new Pixel();
        }
    }

最后,我不是 Swing 专家,但我认为在 EDT 之外使用 GUI 不是一个好主意。 .

关于java - 对象数组 - 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9479715/

相关文章:

java - 无限循环线程中的问题

java - EPUB文件生成,封面页

java - 使用 gson 解析带有变体键值的 json 到 hashmap

Java集合求最大数

java - 更新 observableList 的更有效方法

java - Java 输出中的未知间距问题

Java 将 object[] 转换为模型

java - 找到使用流生成 map 的更好方法

Java int 值类型转Character

java - 如何使用 Hibernate/JPA 调用返回字符串的 Oracle 函数?