2012-05-30 4 views
-1

저는 2 개의 클래스가 있습니다. 하나는 MainBaby.java이며 다음이 포함안드로이드의 다른 클래스에서 메소드를 호출 할 때 오류가 발생했습니다.

:

public class MainBaby extends SurfaceView implements SurfaceHolder.Callback { 

public MainBaby(Context context){ 
    super(context); 
    init(); 
} 

public MainBaby(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
     init(); 
} 

public MainBaby(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
     init(); 
} 

public void init(){ 
    // adding the callback (this) to the surface holder to intercept events 

    getHolder().addCallback(this); 

    // create the game loop thread 
    thread = new ThreadBaby(getHolder(), this); 

    mPath = new Path(); 
    mBitmapPaint = new Paint(Paint.DITHER_FLAG); 
    p = new Paint(); 
    p.setAntiAlias(true); 
    p.setDither(true); 
    p.setColor(Color.BLACK); 
    p.setStyle(Paint.Style.STROKE); 
    p.setStrokeJoin(Paint.Join.ROUND); 
    p.setStrokeCap(Paint.Cap.ROUND); 
    p.setStrokeWidth(50); 

    setFocusable(true); 

} 

public void callMe(){ 

    Log.v("tag", "the button successfully pressed"); 
} 
} 

main.xml에

<AbsoluteLayout 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 
    <coba.gesture.Main 
    android:id="@+id/LayoDalam" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 
</AbsoluteLayout> 

의 팽창이 클래스와 내가 같이 cobaGesture.java에서 방법 callMe()를 호출 할

public class CobaGesture extends Activity { MainBaby mb; 내가 버튼을 클릭하면하지만, 응용 프로그램이 강제 폐쇄했고 여기에 로그 캣의

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ImageButton resetBut = (ImageButton) findViewById(R.id.reset); 
    resetBut.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      mb.callMe(); 
     } 
    });  
} 

:

05-30 10:55:58.433: ERROR/AndroidRuntime(704): FATAL EXCEPTION: main 
05-30 10:55:58.433: ERROR/AndroidRuntime(704): java.lang.NullPointerException 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at coba.gesture.CobaGesture$1.onClick(CobaGesture.java:41) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at android.view.View.performClick(View.java:2485) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at android.view.View$PerformClick.run(View.java:9080) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at android.os.Handler.handleCallback(Handler.java:587) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at android.os.Looper.loop(Looper.java:123) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at android.app.ActivityThread.main(ActivityThread.java:3647) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-30 10:55:58.433: ERROR/AndroidRuntime(704):  at dalvik.system.NativeStart.main(Native Method) 

무엇을 뜻 하는가? 어떻게 해결할 수 있을까요?

미리 감사드립니다.

업데이트! enter image description here

답변

2

올바른 컨텍스트 (이 경우 사용자 활동) 인 초기 개체 여야합니다. 그래서는 다음과 같습니다

mb = new MainBaby(CobaGesture.this); 
OR: 
    mb = new MainBaby(getApplicationContext()); 

은 onClick 이벤트 또는에서 onCreate에이 코드를 넣어, 그래서 당신은 mb.callMe()를 사용할 수 있습니다; 모든 상황에 대해

hereAndroid document

+0

감사합니다 R4j. 당신은 내 문제를 해결했습니다. 고마워요! – user1008497

0
mb.callMe(); 

가 오류의 이유 먹으 렴 institiated되지 않습니다 : 여기에 편집 된 코드와 오류입니다. 즉, 아무 것도 가리 키지 않거나 Null을 가리키는 변수를 사용하고 있습니다. 코드에서 다른 클래스를 사용하려면 먼저 선언해야합니다.

public void onClick(View v) { 
MainBaby mb = new MainBaby(); //This initiates the variable correctly. 
mb.callMe(); 
} 
+0

위의 코드를 사용하면 오류가 표시됩니다. "MainBaby (context)와 일치하는 인수 추가", "MainBaby (context, attrs)와 일치하는 인수 추가", "MainBaby (context, attrs, defStyle)와 일치하는 인수 추가"라고 말합니다. – user1008497

+0

MainBaby 클래스에는 생성자에 매개 변수가 있습니다. 잘못되었습니다. –

0

MB = 새로운 MainBaby (CobaGesture.this)로 객체를 초기화 MB; oncreate 메서드 내

+0

위의 코드를 사용했지만 오류가 발생했습니다. MainBaby (context, attrs)와 일치하는 인수 추가 ","MainBaby (context, attrs, defStyle)와 일치하는 인수 추가 "- – user1008497

+0

편집 된 코드보기 – Ponmalar

+0

이미지를 게시했습니다. 그것을 확인하시기 바랍니다. – user1008497

-2

callme() 관점에서 우리가 어떤 버튼을 누르면 때 호출 로이드 방법이다에서이다. 적어도 하나 이상의 버튼이 포함 된 활동에이 메소드를 넣고 프로젝트를 실행하십시오.

public void callMe(View view){ 

      Log.e("tag", "the button successfully pressed"); 
     } 
관련 문제