나는 튀어 나오고 싶은 공의 숫자 을 사용자로부터 입력받는 튀는 공 프로젝트를 만들고 있습니다. 그런 다음 번호 사용자에 따라 코드를 작성하기 위해 스위치 케이스를 사용하고 있습니다. 내가 스위치 케이스를 사용하지 않고, 볼의 수에 따라 사용자로부터 입력을받지 않고 프로젝트를 수행 할 때 나는 잘 동작 할 것이다. 그러나 스위치 케이스로 볼 때 문제를 만든다. 볼을 표시해야하는 스크린을 열면 ..이 오류는 "불행하게도, 응용 프로그램이 중지"... 여기에 문제를 생성하는 코드 부분을 보여줍니다 여기스위치 케이스 문제 (안드로이드)
package com.example.preliminarytest;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.util.AttributeSet;
import android.app.Activity;
import android.view.View;
import android.widget.Toast;
public class AnimationView extends View{
private final int FRAME_RATE=15;
private Paint paint;
private Handler h;
Ball myball;
Ball greenball;
Ball redball;
Ball cyanball;
Ball yellowball;
Ball greyball;
Ball magentaball;
Ball grey;
int value;
public void setString(int value)
{
this.value = value;
System.out.println("value="+value);
}
public AnimationView(Context context,AttributeSet attrs) {
super(context,attrs);
// TODO Auto-generated constructor stub
h=new Handler();
paint=new Paint();
paint.setColor(Color.BLUE);
switch(value)
{
case 1:
myball=new Ball(100,100,Color.BLUE,50);
myball.setDX(10);
myball.setDY(10);
break;
case 2:
myball=new Ball(100,100,Color.BLUE,50);
greenball=new Ball(200,200,Color.GREEN,50);
myball.setDX(10);
myball.setDY(10);
greenball.setDX(10);
greenball.setDY(10);
break;
case 3:
myball=new Ball(100,100,Color.BLUE,50);
greenball=new Ball(200,200,Color.GREEN,50);
redball=new Ball(50,400,Color.RED,50);
myball.setDX(10);
myball.setDY(10);
greenball.setDX(10);
greenball.setDY(10);
redball.setDX(10);
redball.setDY(10);
break;
case 4:
myball=new Ball(100,100,Color.BLUE,50);
greenball=new Ball(200,200,Color.GREEN,50);
redball=new Ball(50,400,Color.RED,50);
cyanball=new Ball(100,300,Color.CYAN,50);
myball.setDX(10);
myball.setDY(10);
greenball.setDX(10);
greenball.setDY(10);
redball.setDX(10);
redball.setDY(10);
cyanball.setDX(10);
cyanball.setDY(10);
break;
case 5:
myball=new Ball(100,100,Color.BLUE,50);
greenball=new Ball(200,200,Color.GREEN,50);
redball=new Ball(50,400,Color.RED,50);
cyanball=new Ball(100,300,Color.CYAN,50);
yellowball=new Ball(10,300,Color.YELLOW,50);
myball.setDX(10);
myball.setDY(10);
greenball.setDX(10);
greenball.setDY(10);
redball.setDX(10);
redball.setDY(10);
cyanball.setDX(10);
cyanball.setDY(10);
yellowball.setDX(10);
yellowball.setDY(10);
break;
case 6:
myball=new Ball(100,100,Color.BLUE,50);
greenball=new Ball(200,200,Color.GREEN,50);
redball=new Ball(50,400,Color.RED,50);
cyanball=new Ball(100,300,Color.CYAN,50);
yellowball=new Ball(10,300,Color.YELLOW,50);
magentaball=new Ball(150,300,Color.MAGENTA,50);
myball.setDX(10);
myball.setDY(10);
greenball.setDX(10);
greenball.setDY(10);
redball.setDX(10);
redball.setDY(10);
cyanball.setDX(10);
cyanball.setDY(10);
yellowball.setDX(10);
yellowball.setDY(10);
magentaball.setDX(10);
magentaball.setDY(10);
break;
case 7:
myball=new Ball(100,100,Color.BLUE,50);
greenball=new Ball(200,200,Color.GREEN,50);
redball=new Ball(50,400,Color.RED,50);
cyanball=new Ball(100,300,Color.CYAN,50);
yellowball=new Ball(10,300,Color.YELLOW,50);
magentaball=new Ball(150,300,Color.MAGENTA,50);
grey=new Ball(100,150,Color.GRAY,50);
myball.setDX(10);
myball.setDY(10);
greenball.setDX(10);
greenball.setDY(10);
redball.setDX(10);
redball.setDY(10);
cyanball.setDX(10);
cyanball.setDY(10);
yellowball.setDX(10);
yellowball.setDY(10);
magentaball.setDX(10);
magentaball.setDY(10);
grey.setDX(10);
grey.setDY(10);
break;
default:System.out.println("invalid value");
}
}
protected void onDraw(Canvas c)
{
switch(value)
{
case 1:
myball.bounce(c);
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
break;
case 2:
myball.bounce(c);
greenball.bounce(c);
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
break;
case 3:
myball.bounce(c);
greenball.bounce(c);
redball.bounce(c);
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
break;
case 4:
myball.bounce(c);
greenball.bounce(c);
redball.bounce(c);
cyanball.bounce(c);
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
break;
case 5:
myball.bounce(c);
greenball.bounce(c);
redball.bounce(c);
cyanball.bounce(c);
yellowball.bounce(c);
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
c.drawCircle(yellowball.getX(), yellowball.getY(),yellowball.getRadius(), yellowball.getPaint());
break;
case 6:
myball.bounce(c);
greenball.bounce(c);
redball.bounce(c);
cyanball.bounce(c);
yellowball.bounce(c);
magentaball.bounce(c);
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
c.drawCircle(yellowball.getX(), yellowball.getY(),yellowball.getRadius(), yellowball.getPaint());
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
c.drawCircle(magentaball.getX(), magentaball.getY(),magentaball.getRadius(), magentaball.getPaint());
break;
case 7:
myball.bounce(c);
greenball.bounce(c);
redball.bounce(c);
cyanball.bounce(c);
yellowball.bounce(c);
magentaball.bounce(c);
greyball.bounce(c);
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
c.drawCircle(yellowball.getX(), yellowball.getY(),yellowball.getRadius(), yellowball.getPaint());
c.drawCircle(myball.getX(), myball.getY(),myball.getRadius(), myball.getPaint());
c.drawCircle(greenball.getX(), greenball.getY(),greenball.getRadius(), greenball.getPaint());
c.drawCircle(redball.getX(), redball.getY(),redball.getRadius(), redball.getPaint());
c.drawCircle(cyanball.getX(), cyanball.getY(),cyanball.getRadius(), cyanball.getPaint());
c.drawCircle(magentaball.getX(), magentaball.getY(),magentaball.getRadius(), magentaball.getPaint());
c.drawCircle(greyball.getX(), greyball.getY(),greyball.getRadius(), greyball.getPaint());
break;
default:System.out.println("invalid value");
}
h.postDelayed(r, FRAME_RATE);
}
private Runnable r=new Runnable()
{ public void run()
{ invalidate();
}
};
}
그리고 튀는 것은 로그 캣
,617에 표시되는 오류입니다04-08 17:37:55.288: E/AndroidRuntime(685): FATAL EXCEPTION: main
04-08 17:37:55.288: E/AndroidRuntime(685): java.lang.NullPointerException
04-08 17:37:55.288: E/AndroidRuntime(685): at com.example.preliminarytest.AnimationView.onDraw(AnimationView.java:162)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.View.draw(View.java:13458)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.View.draw(View.java:13342)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.View.draw(View.java:13340)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.View.draw(View.java:13461)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.widget.FrameLayout.draw(FrameLayout.java:467)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.View.draw(View.java:13342)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.View.draw(View.java:13340)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.View.draw(View.java:13461)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.widget.FrameLayout.draw(FrameLayout.java:467)
04-08 17:37:55.288: E/AndroidRuntime(685): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2183)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2258)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2153)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2021)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1832)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.Choreographer.doFrame(Choreographer.java:525)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.os.Handler.handleCallback(Handler.java:615)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.os.Looper.loop(Looper.java:137)
04-08 17:37:55.288: E/AndroidRuntime(685): at android.app.ActivityThread.main(ActivityThread.java:4745)
04-08 17:37:55.288: E/AndroidRuntime(685): at java.lang.reflect.Method.invokeNative(Native Method)
04-08 17:37:55.288: E/AndroidRuntime(685): at java.lang.reflect.Method.invoke(Method.java:511)
04-08 17:37:55.288: E/AndroidRuntime(685): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-08 17:37:55.288: E/AndroidRuntime(685): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-08 17:37:55.288: E/AndroidRuntime(685): at dalvik.system.NativeStart.main(Native Method)
글쎄, 클래스 생성자가 switch-case 문을 호출하고 있습니다. 현재 ur 값이 초기화되지 않았습니다. ur switch-case는 ur 값이 초기화 된 후에 만 실행되어야합니다. –
당신은'myball.bounce (c);에'myball'과'c' 라인에 문제가 있습니다. 162 :'java.lang.NullPointerException 04-08 17 : 37 : 55.288 : E/AndroidRuntime (685) : at com.example.preliminarytest.AnimationView.onDraw (AnimationView.java:162)' –
'value'는 null이 아닙니까? – Andy