如何在组件的初始绘制时避免NullPointerException?

时间:2013-04-14 10:24:25

标签: java swing nullpointerexception awt

目前我尝试下棋。这个主类调用一个JPanel子类,我在其上绘制数字。

package schach;

public class schach extends JFrame {

  private SpielFeld spiel = new SpielFeld();

  public schach(String title) {

    Container cp = getContentPane();
    cp.add(spiel, BorderLayout.CENTER);
  }

  public static void main(String[] args) {
    new schach("Schach");
  }  
}

然后继续使用SpielFeld,JPanel子类,它应该绘制数字和板子:

package schach;

public class SpielFeld extends JPanel {

  private Image brettimg =     new ImageIcon("schach\\sprites\\brett.png").getImage();
  private Image bauerWimg =    new ImageIcon("schach\\sprites\\bauerW.png").getImage();

  private ArrayList<Figur> figuren = new ArrayList<Figur>();

  private Bauer bauerW1 = new Bauer(6, 0);

  public SpielFeld() {
    figuren.add(bauerW1);
  }

  @Override
  public void paintComponent(Graphics g) {

    g.drawImage(brettimg, 0, 0, null);

    for (int i=0; i<figuren.size(); i++) {
      g.drawImage(bauerWimg, (int) figuren.get(i).getPoint().getX()*64, (int) figuren.get(i).getPoint().getY()*64, null);
    }    
  }
}

现在我得到一个NullPointerException。我认为这是因为创建“spiel”的顺序,调用paintComponent(默认情况下,将JFrame添加到ContentPane或其他东西?)和创建并填充的ArrayListed。我试图评论一些东西,看它是如何工作的,但似乎无法弄明白。它是如何工作的,我该如何解决这个问题?我试图删除希望不重要的东西。

Figur.java

package schach;

public class Figur {

  Point posi;

  public Figur(int x, int y) {
    posi.setLocation(x, y);
  }

  public Point getPoint() {
    return posi;
  }
}

Bauer.java

package schach;

public class Bauer extends Figur {

  boolean zug = false;

  public Bauer(int x, int y) {
    super(x, y);
  }
}

@skirsch 此?

Exception in thread "main" java.lang.NullPointerException
    at schach.Figur.<init>(Figur.java:10)
    at schach.Bauer.<init>(Bauer.java:8)
    at schach.SpielFeld.<init>(SpielFeld.java:29)
    at schach.schach.<init>(schach.java:10)
    at schach.schach.main(schach.java:31)

1 个答案:

答案 0 :(得分:0)

在类Figur中,Point posi未初始化,因此为null。 替换

public Figur(int x, int y) {
    posi.setLocation(x, y);
}

通过

public Figur(int x, int y) {
    posi = new Point(x, y);
}

消除NullPointer异常。