2012-04-17 54 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 

我不不知道为什么会发生混乱,看起来事件源不可见。

Eclipse没有显示任何警告或错误消息,LogCat中没有出现其他错误。 因此,任何人都知道它正在发生什么?

感谢=]

+0

接受答案。 – thej 2012-10-24 06:29:32

回答

0

尝试从您的onTouchEvent()监听器返回false

当您返回true时,该事件不会沿线传播,并可能导致NPE。

1
setContentView(new FdView(this)); 

替换上面的代码如下

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

这是因为你没有ontouch设定为任何看法。

+0

我在更新Eclipse之后重建了该项目,并且错误消失了,但Eclipse开始显示关于没有侦听器视图的警告。这个技巧很有用,所以谢谢你。 – octpos 2012-04-18 01:16:22

相关问题