2014-04-08 2 views
0

나는 그/그녀가 튀고 싶은 공 숫자 을 사용자로부터받습니다. 그런 다음 사용자가 입력 한 숫자에 따라 추가 코드를 작성하기 위해 스위치 케이스를 사용하고 있습니다. 프로젝트를 실행하면 activity_two로 이동하려고하면 "불행히도 응용 프로그램이 중지되었습니다"라는 오류가 표시됩니다. 스위치 또는 다른 문제를 호출하기 전에 변수 '값'이 초기화되지 않았습니까? .I은 그와 함께 많은 것을 시도 ..스위치 케이스가 작동하지 않습니다

SecondActivity.java

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.RectF; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 

public class SecondActivity extends Activity { 
    AnimationView animationview; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Intent i = getIntent(); 
     int text = i.getIntExtra("TextBox",3); 
     System.out.println(text); 
     setContentView(R.layout.activity_two); 
      animationview=(AnimationView)findViewById(R.id.animationView); 
     animationview.setString(text); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

AnimationView.java

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(); 
    } 
    }; 
    } 

로그 캣 오류 메시지

그것이 이제까지에서는 setString()에 대한 호출에 의해 초기화되기 전에 당신의 생성자에서
4-08 19:34:59.610: E/AndroidRuntime(660): FATAL EXCEPTION: main 
04-08 19:34:59.610: E/AndroidRuntime(660): java.lang.NullPointerException 
04-08 19:34:59.610: E/AndroidRuntime(660): at com.example.preliminarytest.AnimationView.onDraw(AnimationView.java:164) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.View.draw(View.java:13458) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.View.draw(View.java:13342) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.drawChild(ViewGroup.java:2929) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.View.draw(View.java:13340) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.drawChild(ViewGroup.java:2929) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.View.draw(View.java:13461) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.widget.FrameLayout.draw(FrameLayout.java:467) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.View.draw(View.java:13342) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.drawChild(ViewGroup.java:2929) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.View.draw(View.java:13340) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.drawChild(ViewGroup.java:2929) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.View.draw(View.java:13461) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.widget.FrameLayout.draw(FrameLayout.java:467) 
04-08 19:34:59.610: E/AndroidRuntime(660): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2183) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2258) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2153) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2021) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1832) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.Choreographer.doFrame(Choreographer.java:525) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.os.Handler.handleCallback(Handler.java:615) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.os.Looper.loop(Looper.java:137) 
04-08 19:34:59.610: E/AndroidRuntime(660): at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-08 19:34:59.610: E/AndroidRuntime(660): at java.lang.reflect.Method.invokeNative(Native Method) 
04-08 19:34:59.610: E/AndroidRuntime(660): at java.lang.reflect.Method.invoke(Method.java:511) 
04-08 19:34:59.610: E/AndroidRuntime(660): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-08 19:34:59.610: E/AndroidRuntime(660): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-08 19:34:59.610: E/AndroidRuntime(660): at dalvik.system.NativeStart.main(Native Method) 

activity_two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <com.example.preliminarytest.AnimationView 
     android:id= "@+id/animationView" 
     android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

</LinearLayout> 
+0

Logcat에 들어있는 스택 추적을 게시하십시오. –

+0

코드가 너무 많으므로 UR 문제에 대한 정확한 의견을 게시하십시오 –

답변

0

당신은 명확 치에 액세스 할 수 있습니다. 그건 널 포인터 예외를 생성합니다! 모든 초기화 논리를 사용하여 switch 문을 setString() 내부에서 호출되는 함수로 이동합니다. setString()이 아직 호출되지 않은 경우 onDraw()가 무언가를하는지 확인하십시오.

+0

감사합니다. –

1

문제가 변수 '값이'예, 간접적으로

스위치

를 호출하기 전에 초기화되지 않는 것입니다입니다. 귀하의 logcat은 어딘가의 AnimationView.java 라인 164에 NullPointerException을 명확하게 보여줍니다. value 자체는 NullPointerException을 반환 할 수 없으며 기본 유형이며 기본값 (0)을가집니다. 이 인 라인을 지정하지 않았지만

, 나는 그것이 myball.bounce(c);

생성자의 스위치가 "잘못된 값"인쇄 기본 케이스를 가지고 추측하고있다. 당신은 logcat에서 이것을 볼 수 있습니까?

생성자가 호출되기 전에 setString()을 호출 할 수 없기 때문에 은 생성자에서 스위치를 켜면 필연적으로 0이 될 것이므로 myball은 초기화되지 않습니다.

관련 문제