-2

ゲームを作成していますが、起動しようとすると、次のように表示されましたjava.lang.NullPointerException

コードは次のとおりです。

package com.shinxs.rain.graphics;

import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
import javax.swing.ImageIcon;

public class Screen {

    private int width, height;
    public int[] pixels;
    Graphics g;

    public int[] tiles = new int[64 * 64];

    private Random random = new Random();

    ImageIcon i = new ImageIcon("Resources/Inventory.png");
    Image image = i.getImage();

    public Screen(int width, int height) {
        this.width = width;
        this.height = height;
        pixels = new int[width * height];

        for (int i = 0; i < 64 * 64; i++) {
            tiles[i] = random.nextInt(0xFFFFFF);
        }
    }

    public void clear() {
        for (int i = 0; i < pixels.length; i++) {
            pixels[i] = 0;
        }       
    }

    public void render() {
        g.drawImage(image, 500, 200, 124, 280, null);
    }
}

長いこと悩んでいるので、直し方を教えてください。

4

3 に答える 3

4
 Graphics g;

あなたはヌル参照gを指しており、ヌルを呼び出しているため、NPE()が発生します。drawImageNullPointerException

g.drawImage(image, 500, 200, 124, 280, null);

Javaでグラフィックスを使用する方法については、このチュートリアルを参照してください

于 2012-11-03T18:16:10.237 に答える
1

他の値に割り当てないため、 Graphics オブジェクトは null です。Null は、オブジェクトが「空」であり、初期化されるオブジェクトの論理値であるデータを含まないことを意味します。Graphics クラスには public コンストラクターがないため (new Graphics() は機能しません)、Graphics オブジェクトを使用するには、事前に作成されたオブジェクトにアクセスする必要があります。私が知っている唯一の方法は、javax.swing.JFrame を拡張し、事前にインスタンス化された Graphics オブジェクトが引数として渡される paint(Graphics g) をオーバーライドすることです。Graphics オブジェクトは、JFrame の内部動作によって作成されます。

   class Screen extends javax.swing.JFrame{

         public void paint(Graphics g){
                super.paint(g); //correctly draws background

                //now call methods on g, the graphics object
         }
   }

Swing のドキュメントを調べて、その仕組みについて詳しく知ることを強くお勧めします。

于 2012-11-03T18:30:29.110 に答える
0

Graphics g; オブジェクトを初期化してメソッドを呼び出すことはありません。Graphics オブジェクトを初期化する必要があります。そうしないと、オブジェクトのデフォルト値がnullであるため、null になります。

Graphics g= Griphics.create();

g.darwLine()
于 2012-11-03T18:19:21.767 に答える