调用wait()时的异常

时间:2011-07-29 05:10:05

标签: android

我正在实施一个应用程序,其中我播放两个声音(“ touchandshow ”,然后是“ tiger ”)。这是在我的looper方法中完成的。我是第一次打电话,然后拨打wait(),然后再次拨打looper

问题是我在wait()调用的LogCat中遇到异常。

这是我的代码:

        mPlayer = MediaPlayer.create(this, R.raw.touchandshow);
    mPlayer2 = MediaPlayer.create(this, R.raw.tiger);

    try {

        looper();
        wait(2000);

        looper();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public void looper() {
    CountDownTimer aCounter;
    aCounter = new CountDownTimer(2000, 1000) {
        public void onTick(long millisUntilFinished) {
            mPlayer.start();
        }

        public void onFinish() {
            mPlayer2.start();
        }
    };
    aCounter.start();

}  

LogCat:

    07-29 10:20:09.412: ERROR/AndroidRuntime(1188): FATAL EXCEPTION: main
07-29 10:20:09.412: ERROR/AndroidRuntime(1188): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.AudioTesting/com.AudioTesting.AudioTesting}: java.lang.IllegalMonitorStateException: object not locked by thread before wait()
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.os.Looper.loop(Looper.java:123)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.app.ActivityThread.main(ActivityThread.java:4627)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at java.lang.reflect.Method.invokeNative(Native Method)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at java.lang.reflect.Method.invoke(Method.java:521)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at dalvik.system.NativeStart.main(Native Method)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188): Caused by: java.lang.IllegalMonitorStateException: object not locked by thread before wait()
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at java.lang.Object.wait(Native Method)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at java.lang.Object.wait(Object.java:326)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at com.AudioTesting.AudioTesting.onCreate(AudioTesting.java:25)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-29 10:20:09.412: ERROR/AndroidRuntime(1188):     ... 11 more

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:17)

java.lang.IllegalMonitorStateException: object not locked by thread before wait()

你的问题是这个消息。您无法在尚未锁定的对象上调用waitwait用于同步,而不是通用的“睡眠”设施。

如果您只想暂停线程,请使用:

Thread.sleep(2000);

在你的try块内。