-1

私は2つのクラスを持っています。1つは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()を呼び出したいです:

パブリッククラスCobaGestureはActivity{MainBabymb;を拡張します。

@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)

どういう意味ですか?そしてそれを解決する方法は?

前もって感謝します。

アップデート!編集したコードとエラーは次のとおりです。 ここに画像の説明を入力してください

4

4 に答える 4

2

正しいコンテキストでオブジェクトを初期化する必要があります(この場合、それはあなたのアクティビティです)。つまり、次のようになります。

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

このコードをonClickイベントまたはonCreateに入れて、mb.callMe();を使用できるようにします。

コンテキストに関するすべてはここにあり、Androidドキュメントから

于 2012-05-30T04:50:09.217 に答える
0
mb.callMe();

エラーの理由は開始されていません。つまり、何も指さないか、Nullを指す変数を使用しています。コードで他のクラスを使用する場合は、最初にそれを宣言する必要があります。

public void onClick(View v) {
 MainBaby mb = new MainBaby(); //This initiates the variable correctly.
 mb.callMe();
}
于 2012-05-30T04:05:54.517 に答える
0

オブジェクト mb をmb=new MainBaby(CobaGesture.this);として初期化します。oncreate メソッド内

于 2012-05-30T04:07:46.953 に答える
-2

callme() は Android のメソッドで、ビュー内で任意のボタンを押したときに呼び出されます。以下のメソッドを少なくとも 1 つのボタンを含むアクティビティに配置し、プロジェクトを実行するだけです。

 public void callMe(View view){

            Log.e("tag", "the button successfully pressed");
        } 
于 2014-02-18T11:46:56.907 に答える