현재 체스 게임을하려고합니다. 메인 클래스 인이 클래스는 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");
}
}
는 그런 다음 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가 호출됩니다 (기본적으로 ContentPane 또는 JFrame을 추가하는 uppon?). 그리고 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
음 ... 최근에이 정확한 코드를 보지 못했습니까? 같은 코스 ...? 어쨌든, 자바 명명 규칙을 배우고 그것들을 고수하십시오. – kleopatra
1) 이미지가로드되었는지 테스트합니다. 2) 디버거를 사용하고 코드를 단계별로 실행하는 방법을 배웁니다. 3) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –