-1

Java グラフィック プログラムを使用して、4 つの三目並べボードの簡単なイメージを作成しようとしています。私のプログラムはコンパイルして実行できますが、4 つのボードのイメージを生成しません。インタラクション ペインに次のエラーが表示されます (コーディングには DrJava を使用しています)。

Welcome to DrJava.  Working directory is C:\Users\Daniel\Desktop\CS Programs
> run TicTacToeBoards
java.lang.NullPointerException
    at TicTacToeBoards.drawTicTacToeBoard(TicTacToeBoards.java:38)
    at TicTacToeBoards.<init>(TicTacToeBoards.java:18)
    at TicTacToeBoards.main(TicTacToeBoards.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

これは私が実行しようとしているプログラムです:

import java.awt.Color;

public class TicTacToeBoards {

  private NsccWindow win;

  public TicTacToeBoards() {

    NsccWindow win;
    win = new NsccWindow(10, 10, 330, 300);
    win.setTitle("Tic-Tac-Toe Boards");
    drawTicTacToeBoard(40, 40);
    drawTicTacToeBoard(40, 170);
    drawTicTacToeBoard(170, 40);
    drawTicTacToeBoard(170, 170);

  }  

  public void drawTicTacToeBoard(int x, int y) {

    NsccLine vertLineL;
    NsccLine vertLineR;
    NsccLine horizLineU;
    NsccLine horizLineD;

    vertLineL = new NsccLine((x + 30), y, (x + 30), (y + 90));
    vertLineR = new NsccLine((x + 60), y, (x + 60), (y + 90));
    horizLineU = new NsccLine(x, (y + 30), (x + 90), (y + 30));
    horizLineD = new NsccLine(x, (y + 60), (x + 90), (y + 30));


    win.add(vertLineL);
    win.add(vertLineR);
    win.add(horizLineU);
    win.add(horizLineD);


    win.repaint();




  }

  public static void main(String[] args) {
    TicTacToeBoards test = new
    TicTacToeBoards();
  }
}

私はJavaプログラミングにかなり慣れていないので、DrJavaでデバッグしてエラーを見つけようとしても役に立ちませんでした。誰か助けてくれませんか?:)

4

1 に答える 1

7

コンストラクターから次の行を削除します。

NsccWindow win;

すでにwinフィールドがあるので、コンストラクター内でも宣言する必要はありません。

コンストラクター内で宣言すると、インスタンス フィールドが非表示になり、コンストラクター スコープのみに限定された変数がインスタンス化されます。したがって、 内のインスタンス フィールドにアクセスしようとすると、drawTicTacToeBoard実際にはnull.

于 2013-04-22T03:19:15.540 に答える