Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exception when calling wait()

Tags:

android

I am implementing an application in which I play two sounds ("touchandshow" followed by "tiger"). This is done in my looper method. I call it a first time, then call wait(), then call looper again.

The problem is that I get an exception in the LogCat from the wait() call.

Here is my code:

        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();

}  

And the 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

Can anyone tell me what I'm doing wrong?

like image 674
Nikunj Patel Avatar asked Jul 29 '11 05:07

Nikunj Patel


People also ask

Is it possible to call the wait () method?

If we are trying to call the wait() method without acquiring a lock, it can throw java. lang. IllegalMonitorStateException.

Which of these exceptions can the wait () method of the object class throw?

Exception. IllegalMonitorStateException − if the current thread is not the owner of the object's monitor. InterruptedException − if another thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

What will happen if wait () is called from message method?

The wait() Method Simply put, calling wait() forces the current thread to wait until some other thread invokes notify() or notifyAll() on the same object. For this, the current thread must own the object's monitor.

What happens when a thread executes wait ()?

For a thread to call wait() or notify(), the thread has to be the owner of the lock for that object. When the thread waits, it temporarily releases the lock for other threads to use, but it will need it again to continue execution.


1 Answers

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

Your problem is this message. You can't call wait on an object you haven't locked first. wait is meant for synchronization, not as a generic "sleep" facility.

If you just want to pause your thread, use:

Thread.sleep(2000);

inside your try block instead.

like image 195
Mat Avatar answered Sep 28 '22 05:09

Mat