2013-06-07 4 views
2

클래스가 4 개 있습니다. 하나는 추상 엔티티 클래스이고, 하나는 볼 클래스이고, 하나는 메인 클래스이고 다른 하나는 스크린 클래스입니다.프로그램 실행시 java.lang.NullPointerException이 발생했습니다.

볼 클래스는 엔티티 클래스를 확장하며 5 개의 변수가 있습니다.

public void paint(Graphics g){ 
    super.paint(g); 
    ball.paint(g); 
} 

그리고 물론

, ball.paint를 사용하는가에 대한 객체를 만들 필요가 :

화면 기능은 페인트 방법이있다. 그래서, 내가 볼 오브젝트합니다

public Screen(){ 
    ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX()); 
} 

이 더와 함께 온다 :

Ball ball; 

내가 필요하기 때문에 다음 화면 생성자이 추가 (공 5 개 변수를 사용하는 생성자가 있습니다) 나는이 프로그램을 실행할 때 오류가 있지만, 나는 콘솔에서이 오류를 얻을 :

,536 : 메인 클래스의

Exception in thread "main" java.lang.NullPointerException 
at h3x.engine.gfx.Screen.<init>(Screen.java:18) 
at h3x.engine.Main.main(Main.java:16) 

라인 (16)이있다

ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX()); 

그래서 제 질문은, 왜 이런 일이 있습니다, 어떻게 고칠 수 있습니다 화면 클래스의

frame.add(new Screen()); 

... 라인 (18)이있다. 클래스에 필요한 모든 코드를 넣을 수 있습니다.

감사합니다.

+0

더 나은 도움을 빨리 [SSCCE] (http://sscce.org/), 짧은 실행 가능한, 컴파일 가능한, 즉 배열에 대한 모든 공을 넣어 전에, 내부 게시 스윙 타이머에서 호출 된 배열에서 볼을 가져 오는 paintComponent 여기에있는 모든 대답은 어둠에 대한 단점이 될 수 있습니다. – mKorbel

답변

4

당신은 전화 : 당신은 당신이 초기화 인스턴스에서 값을 검색 할 것으로 예상 의미

ball = new Ball(ball.getXxx()....) 

. 초기화가 완료되기 전에는 null입니다. 따라서 NPE (short for NullPointerException).

+0

답변 해 주셔서 감사합니다. 그래서, 어떻게 이런 일이 일어나지 않도록 할 수 있습니까? –

+0

생성자에 값을 전달해야합니다 (weight, width 등). 실수 값;) 디폴트 값을 가지고 있다면 빈 생성자를 만들고'new Ball()'을 수행하면됩니다.그러면 적어도 "공"초기화가 수정됩니다. 그 후 ... – fge

+0

그래서, 어떻게 이런 일이 일어나지 않도록 할 수 있습니까? == ball.paint (g);를 제거하여 나의 공무원을 다시 읽으십시오.이 대답은 모호한 질문을 바탕으로합니다. – mKorbel

3

귀하의 라인 참조 ballnull로 설정되도록

Ball ball; 

실제로, 새로운 볼 개체를 만들 수 없습니다. 생성자에서 ball 멤버를 검색하려고하면 NullPointerException이 발생합니다. 자체 생성자에서 객체 인스턴스의 멤버를 사용하는 것은이 컨텍스트에서 용의주의 일입니다.

ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX()); 

아직 존재하지 않는 ball에 값을 할당하려는 :

2

귀하의 문제는이 라인입니다. 대신 진짜 값을 전달합니다

ball = new Ball(5, 4, 2, 7, 7); 
+0

답변 해 주셔서 감사합니다! –

관련 문제