0

ペイン メソッド内で作成した Drawer クラスを参照しようとするたびに、null ポインター例外が発生します。ただし、ペイント関数の外では、クラスは完全に機能します。作成したゲーム クラスは、ペイント メソッド内でも動作します。drawer クラスを参照できない理由がわかりません。

public class Main extends Applet implements Runnable, KeyListener {

public static boolean   CONSOLE = true;

// Integers
public final String     Title   = "";
public final int        res_X   = 800;
public final int        res_Y   = 600;

private Image           image;
private Graphics        second;
private URL             base;

public Game             game;
public Drawer           drawer;

public void init() {

    setSize(res_X, res_Y);
    setBackground(Color.GRAY);
    setFocusable(true);
    addKeyListener(this);
    Frame frame = (Frame) this.getParent().getParent();
    frame.setTitle(Title);

    try {
        base = getDocumentBase();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public void start() {

    **Drawer drawer = new Drawer();**

    Thread mainThread = new Thread(this);
    mainThread.start();

    Thread gameThread = new Thread(game = new Game(drawer));
    gameThread.start();

}

public void run() {

    while (true)
        repaint();

}

public void paint(Graphics g) {

    **System.out.println((drawer == null)?"Null":"Exists");**
                            ^ if I replace with game it returns Exists

    g.fillRect(0, 0, res_X, 20);
    g.fillRect(0, res_Y - 20, res_X, 20);
    g.fillRect(0, 0, 20, res_Y);
    g.fillRect(res_X - 20, 0, 20, res_Y);
    g.fillRect(game.player.xPos, game.player.yPos, 20, 60);

}
4

1 に答える 1

0

start メソッドでローカル変数として宣言しています。

これ: Drawer drawer = new Drawer(); 次のようにする必要があります: drawer = new Drawer();

于 2013-05-03T15:43:38.997 に答える