2013-04-14 3 views
-1

현재 체스 게임을하려고합니다. 메인 클래스 인이 클래스는 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) 
+0

예외 스택 추적을 제공하십시오 – skirsch

+1

음 ... 최근에이 정확한 코드를 보지 못했습니까? 같은 코스 ...? 어쨌든, 자바 명명 규칙을 배우고 그것들을 고수하십시오. – kleopatra

+0

1) 이미지가로드되었는지 테스트합니다. 2) 디버거를 사용하고 코드를 단계별로 실행하는 방법을 배웁니다. 3) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

답변

0

피규어 포인트 포인트는 초기화되지 않으므로 null이됩니다.

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

에 의해

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

교체하면 NullPointer 예외를 제거합니다.

+0

그래, 지금까지는 나 자신을 찾았지만 정말 고마워. 내가 "= 새로운 ..."할 필요가있을 때 탐구 할 수 있니? 간단한 필드와는 달리 클래스의 인스턴스를 만들 때 (나는 그렇게 부름 받았다고 생각합니까?)? – user2247969

+0

클래스의 인스턴스를 원하면 초기화 된 Object가 인스턴스 여야합니다. 기본적으로 _new_를 사용하여 인스턴스화되지 않은 모든 명시된 객체 (즉, Object의 하위 클래스)는 null입니다. –

관련 문제