2014-04-08 2 views
0

나는 튀어 나오고 싶은 공의 숫자 을 사용자로부터 입력받는 튀는 공 프로젝트를 만들고 있습니다. 그런 다음 번호 사용자에 따라 코드를 작성하기 위해 스위치 케이스를 사용하고 있습니다. 내가 스위치 케이스를 사용하지 않고, 볼의 수에 따라 사용자로부터 입력을받지 않고 프로젝트를 수행 할 때 나는 잘 동작 할 것이다. 그러나 스위치 케이스로 볼 때 문제를 만든다. 볼을 표시해야하는 스크린을 열면 ..이 오류는 "불행하게도, 응용 프로그램이 중지"... 여기에 문제를 생성하는 코드 부분을 보여줍니다 여기스위치 케이스 문제 (안드로이드)

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) 
+1

글쎄, 클래스 생성자가 switch-case 문을 호출하고 있습니다. 현재 ur 값이 초기화되지 않았습니다. ur switch-case는 ur 값이 초기화 된 후에 만 ​​실행되어야합니다. –

+1

당신은'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)' –

+0

'value'는 null이 아닙니까? – Andy

답변

0

logcat 출력에 명확하게 기록되어 있으므로 무언가가 있습니다. AnimationView.java의 162 번째 행에있는 NullPointerException입니다. 이 줄을 확인하십시오. 초기화되지 않은 변수를 사용하고있는 것일 수 있습니다.

0

안녕하세요. NullPonterException이 (가) onDraw() 메소드에 표시됩니다. 앱 충돌을 피하기 위해 이와 같은 작업을 수행 할 수 있습니다.

protected void onDraw(Canvas c) 
{ 
if(value>0){ 
Log.e("Value","Value ="+value); 
    switch(value) 
    { 
    // your code. 
    } 
} 
else{ 
Log.e("Exception","Null Value"); 
} 

이렇게하면 앱이 다운되지 않습니다.

+0

'value'는 int이고, null이 될 수는 없으며이 코드는 컴파일 오류를 발생해야한다. – vilpe89

+0

내 잘못 편집한다. 암호. 정보 주셔서 감사합니다 – Nakul