마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

자꾸 NullPointerException 이 뜹니다...

0 추천

import android.app.Activity;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class Ball extends Activity
{

	private String name;	//Red, Blue, Violet, Green
	private int rand;
	ImageView img;
	RelativeLayout rel = (RelativeLayout)findViewById(R.id.GameView);
	
	public Ball(int num)
	{
		rand = (int)(Math.random() * 500 + 1);
		img = new ImageView(this);
		img.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		setName(num);
		Animation ani = new TranslateAnimation(rand, rand, -500, 1700);
        ani.setDuration(5000);
        img.setAnimation(ani);
		status = "S";
		speed = 10000;
	}
	
	public void setName(int num)
	{
		switch(num)
		{
		case 1:
			this.name = "Red";
			img.setBackgroundResource(R.drawable.red);
			rel.addView(img);
			break;
		case 2:
			this.name = "Blue";
			img.setBackgroundResource(R.drawable.blue);
			rel.addView(img);
			break;
		case 3:
			this.name = "Green";
			img.setBackgroundResource(R.drawable.green);
			rel.addView(img);
			break;
		case 4:
			this.name = "Violet";
			img.setBackgroundResource(R.drawable.violet);
			rel.addView(img);
			break;
		}
	}
	


	
}

 

위 소스코드의 Ball 객체를 메인 액티비티에서 

Ball ball = new Ball(1); 

이렇게 호출을 햇더니 계속 널포인트익셉션이 뜹니다.. 도대체 뭐가문제인지 모르겠습니다...

Rtplz 님이 2015년 1월 30일 질문

3개의 답변

+1 추천
답은아니고,

그 문제를 찾아내는게 프로그래머입니다. 2분도 안걸리는 작업을 물어봐서 어쩌려고 하십니까.
익명사용자 님이 2015년 1월 30일 답변
+1 추천

onCreate 는 어디에 있나요?

아마도

RelativeLayout rel = (RelativeLayout)findViewById(R.id.GameView);

여기서 널이 뜨것지요

 

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RelativeLayout rel = (RelativeLayout)findViewById(R.id.GameView);

setContentView 로 해당 레이아웃을 메모리에 올려놓은다음에 뷰를 가져와야겠지요..

nicehee (73,100 포인트) 님이 2015년 1월 30일 답변
+1 추천
널포인트는 가장 흔하고, 또 잡기 쉬운 버그 중 하나죠.

 

해도해도 안 되면 브레이크포인트 잡고 실행해보면 어느 시점에 어떤 변수가 null인지 다 확인이 가능합니다.

 
디버깅하는 능력을 기르는 건 아주 중요합니다. 요즘 코딩은 api만 알면 누구나 한다지만

버그 없는 깔끔한 프로그램을 만드는데에 디버깅 능력은 필수죠.

 
개발에 쓰이는 시간이 10이라면 디버깅에 쓰이는 시간이 50은 되는 것 같네요.

규모가 커지면 커질수록 말이죠.
익명사용자 (5,930 포인트) 님이 2015년 1월 30일 답변
...