0

ゲームのバックグラウンド用の画像を読み込もうとしていますが、Java が NullPointerException エラーをスローしています。その場所についてコメントします。

主要:

public class Main {
    public static JFrame frame = new JFrame();
    public static final int windowXY[] = {800, 600};
    public static Dimension windowSize = new Dimension(windowXY[0], windowXY[1]);
    public static String windowName;
    public static String windowNames[] = {"Test1", "Test2"};
    public static Random roll = new Random();
    public static int nameRoll = roll.nextInt(2);
    public static Thread thread;
    public static boolean running;
    public static Graphics g;

    public static void main(String[] args) {
        start(g);
    }

    public static void start(Graphics g) {
        System.out.println("Starting up game...");
        windowName = windowNames[nameRoll];

        System.out.println("Loading window...");

        frame.setSize(windowSize);
        frame.setTitle(windowName);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        System.out.println("Finished loading window..");
        System.out.println("Loading textures...");

        MainImageRenderer.render();

        System.out.println("Finished loading textures...");
        System.out.println("Loading background...");

        //THROWS THE ERROR HERE
        MainImageRenderer.draw(g, MainImageRenderer.background, windowXY[0], windowXY[1]);     

        System.out.println("Finished loading background...");
    }
}

MainImageRenderer:

public class MainImageRenderer extends Panel {

    public static Image background;

    public MainImageRenderer() {}

    public static void render() {
        try {
            Image background = ImageIO.read(new File("/resources/background.png"));
        }
        catch(IOException ie) {}
    }

    //THIS IS THE METHOD I AM USING 
    public static void draw(Graphics g, Image img, int x, int y) {
        g.drawImage(img, x, y, null);
    }

}

画像が適切な場所にないためかどうかはわかりません。私は Eclipse を使用しており、resources フォルダーは src フォルダーと同じレベルにあります。

4

3 に答える 3

4

コードのこの部分は間違っています:

try
{
    Image background = ImageIO.read(new File("/resources/background.png"));
}
catch(IOException ie)
{ 
}

background必要なときにローカル変数を作成しています

try
{
     background = ImageIO.read(new File("/resources/background.png"));
}
catch(IOException ie)
{
}

静的変数を非表示にしているbackgroundため、画像をレンダリングするときにbackground設定されませんでした。

また、ニブラーがコメントしたように、gも になりますnull。これは、NullPointerException.

于 2013-06-07T16:44:51.327 に答える
0

余分なものを取り除くと、準備/完了です....

new File("/resources/background.png")

への変更

   new File("resources/background.png")

ところで、これをお勧めします...パッケージ化するときに役立ちます....

 URL url=this.getClass().getResource("resources/background.png");
 BufferedImage img = ImageIO.read(url);

あなたのコードには複数の問題があるようです....

インスタンスオブジェクトタイプnullは、初期化されていない場合にデフォルトになります...あなたgはnull以外のオブジェクトで初期化されていません..

于 2013-06-07T16:53:35.473 に答える