2012-04-17 12 views
0

こんにちは、Opencvの例を変更し、ユーザーが画面に触れるときにアクションを追加するだけです。 コードにはツリークラスがあります。 Activityを拡張するFdActivity、SurfaceViewを拡張してSurfaceHolder.Callbackを実装するFdViewBase、そして最後にFdViewはFdViewBaseを拡張します。Androidコード、Activity.onTouchEvent不明なソース

FdActivityののonCreateメソッド:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE);    
     setContentView(new FdView(this));   
     } 

FdViewBaseは、クラスのコンストラクタメソッドの呼び出しを持っている 'setFocusable(真の);' 。
そして最後にonTouchEventコード:

public boolean onTouchEvent(MotionEvent event) {     
     // if (event.getAction() == MotionEvent.ACTION_DOWN) 
       Log.i(TAG,"DOWN");     
      Log.i(TAG,"/\"); 
      return true; 
     } 

ありません、コンパイルや実行エラーが、このようにコードで起こるが、私はif文のコメントを解除した場合、私はこのエラーメッセージを取得:

04-16 21:59:06.011: I/OpenCV_NativeCamera(8952): ### Camera FPS ### [780] Frames, 12.84 FPS 
    04-16 21:59:06.662: D/AndroidRuntime(8952): Shutting down VM 
    04-16 21:59:06.662: W/dalvikvm(8952): threadid=1: thread exiting with uncaught exception (group=0x40018560) 
    04-16 21:59:06.732: E/AndroidRuntime(8952): FATAL EXCEPTION: main 
    04-16 21:59:06.732: E/AndroidRuntime(8952): java.lang.NullPointerException 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at org.opencv.samples.fd.FdActivity.onTouchEvent(Unknown Source) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at android.app.Activity.dispatchTouchEvent(Activity.java:2099) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1721) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2200) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1884) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at android.os.Looper.loop(Looper.java:130) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at android.app.ActivityThread.main(ActivityThread.java:3835) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at java.lang.reflect.Method.invokeNative(Native Method) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at java.lang.reflect.Method.invoke(Method.java:507) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
    04-16 21:59:06.732: E/AndroidRuntime(8952):  at dalvik.system.NativeStart.main(Native Method) 
    04-16 21:59:07.432: I/OpenCV_NativeCamera(8952): ### Camera FPS ### [810] Frames, 21.09 FPS 
    04-16 21:59:08.864: I/OpenCV_NativeCamera(8952): ### Camera FPS ### [840] Frames, 21.00 FPS 
    04-16 21:59:12.588: I/OpenCV_NativeCamera(8952): ### Camera FPS ### [870] Frames, 8.04 FPS 
    04-16 21:59:13.168: I/Process(8952): Sending signal. PID: 8952 SIG: 9 

Iドンなぜそれが動いているのか分かりません。イベントソースが見えないようです。

Eclipseに警告またはエラーメッセージが表示されなかったため、LogCatに他のエラーは表示されませんでした。 だから、誰もそれがうんざりしていることを知っている?

感謝=]

+0

答えを受け入れます。 – thej

答えて

0

falseあなたからonTouchEvent()リスナーを返してみてください。

trueを返すと、イベントは回線のさらに下に伝播されず、NPEの原因となっている可能性があります。

1
setContentView(new FdView(this)); 

として

View view = new FdView(this); 
view.setOnTouchListener(this); 
setContentView(view); 

の下に上記のコードを置き換えあなたはどのビューにontouch設定していなかったので、これでした。

+0

Eclipseを更新した後、プロジェクトを再ビルドしましたが、エラーはなくなりましたが、Eclipseはリスナーの表示がないという警告を表示し始めました。そして、このヒントはうまくいったので、ありがとう。 – octpos

関連する問題