我正在通過片段類實現OnTouch偵聽器。OnTouch偵聽器不工作在片段
public class ButtonFragment extends Fragment implements OnTouchListener
Overriden onTouch函數看起來像。
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.buttonUp :
{
mAction = new Thread(){
@Override
public void run()
{
try {
ChartJNI3D.cameraPos(1.0f, 'U');
mAction.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
if(event.getAction() == MotionEvent.ACTION_DOWN)
mAction.start();
else if (event.getAction() == MotionEvent.ACTION_UP)
mAction.stop();
}
break;
等等。 問題是隻需要一個OnClick事件並調用該函數。 但是,當它遇到MotionEvent.ACTION_UP
應用程序與NULL指針異常崩潰。 可以發佈日誌,如果有人需要它。
01-08 17:59:10.771: E/AndroidRuntime(3926): FATAL EXCEPTION: Thread-344
01-08 17:59:10.771: E/AndroidRuntime(3926): java.lang.IllegalMonitorStateException: object not locked by thread before wait()
01-08 17:59:10.771: E/AndroidRuntime(3926): at java.lang.Object.wait(Native Method)
01-08 17:59:10.771: E/AndroidRuntime(3926): at java.lang.Object.wait(Object.java:364)
01-08 17:59:10.771: E/AndroidRuntime(3926): at com.example.sample3dchart.ButtonFragment$1.run(ButtonFragment.java:53)
01-08 17:59:10.816: E/InputEventReceiver(3926): Exception dispatching input event.
01-08 17:59:10.816: E/MessageQueue-JNI(3926): Exception in MessageQueue callback: handleReceiveCallback
01-08 17:59:10.821: E/MessageQueue-JNI(3926): java.lang.UnsupportedOperationException
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at java.lang.Thread.stop(Thread.java:1076)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at java.lang.Thread.stop(Thread.java:1063)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at com.example.sample3dchart.ButtonFragment.onTouch(ButtonFragment.java:64)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.View.dispatchTouchEvent(View.java:7241)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.app.Activity.dispatchTouchEvent(Activity.java:2410)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.View.dispatchPointerEvent(View.java:7426)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.os.MessageQueue.nativePollOnce(Native Method)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.os.MessageQueue.next(MessageQueue.java:125)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.os.Looper.loop(Looper.java:124)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at android.app.ActivityThread.main(ActivityThread.java:5041)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at java.lang.reflect.Method.invoke(Method.java:511)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-08 17:59:10.821: E/MessageQueue-JNI(3926): at dalvik.system.NativeStart.main(Native Method)
當代替
try {
ChartJNI3D.cameraPos(1.0f, 'U');
mAction.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我做
try {
ChartJNI3D.cameraPos(1.0f, 'U');
mAction.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
日誌是
01-08 18:01:28.371: E/AndroidRuntime(4125): FATAL EXCEPTION: main
01-08 18:01:28.371: E/AndroidRuntime(4125): java.lang.UnsupportedOperationException
01-08 18:01:28.371: E/AndroidRuntime(4125): at java.lang.Thread.stop(Thread.java:1076)
01-08 18:01:28.371: E/AndroidRuntime(4125): at java.lang.Thread.stop(Thread.java:1063)
01-08 18:01:28.371: E/AndroidRuntime(4125): at com.example.sample3dchart.ButtonFragment.onTouch(ButtonFragment.java:64)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.View.dispatchTouchEvent(View.java:7241)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-08 18:01:28.371: E/AndroidRuntime(4125): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)
01-08 18:01:28.371: E/AndroidRuntime(4125): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.app.Activity.dispatchTouchEvent(Activity.java:2410)
01-08 18:01:28.371: E/AndroidRuntime(4125): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.View.dispatchPointerEvent(View.java:7426)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.os.MessageQueue.nativePollOnce(Native Method)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.os.MessageQueue.next(MessageQueue.java:125)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.os.Looper.loop(Looper.java:124)
01-08 18:01:28.371: E/AndroidRuntime(4125): at android.app.ActivityThread.main(ActivityThread.java:5041)
01-08 18:01:28.371: E/AndroidRuntime(4125): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 18:01:28.371: E/AndroidRuntime(4125): at java.lang.reflect.Method.invoke(Method.java:511)
01-08 18:01:28.371: E/AndroidRuntime(4125): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-08 18:01:28.371: E/AndroidRuntime(4125): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-08 18:01:28.371: E/AndroidRuntime(4125): at dalvik.system.NativeStart.main(Native Method)
首先,您無法在Java中停止線程。 –
這無關你的問題,而是因爲你只要用戶從視圖升降機創建一個新的線程對象,你永遠不會停止的舊線。 另外,stop()是不推薦的調用。 – DeeV
這不是空指針異常。這是一個「UnsupportedOperationException」,因爲你調用了一個無效的方法'stop()' – DeeV