目前我嘗試做一盤棋。這是主類,它調用一個JPanel子類,在其上繪製數字。如何避免初始繪製組件時出現NullPointerException?
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");
}
}
然後繼續施皮爾費爾德,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(默認情況下,uppon將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)
請提供異常的堆棧跟蹤 – skirsch
嗯...我最近沒看過這個確切的代碼嗎?相同的課程......?無論如何,請學習java命名約定並堅持下去。 – kleopatra
1)測試圖像是否加載。 2)學習使用調試器並逐步完成代碼。 3)爲了更快得到更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –