2011-07-29 4 views
4

私は2つのサウンド( "touchandshow"の後に "tiger"が続きます)を再生するアプリケーションを実装しています。これは私のlooperメソッドで行われます。初めて電話をかけた後、wait()に電話してから、looperにもう一度電話してください。wait()を呼び出すときの例外

問題は、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 

誰も私が間違ってやっているものを私に伝えることができますか?

+0

エラーを表示してください。 – Mat

+0

ok私はそれを更新しました –

答えて

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

問題がこのメッセージです。最初にロックしていないオブジェクトにはwaitを呼び出すことはできません。 waitは、同期のためのものであり、一般的な「スリープ」機能ではありません。代わりにあなたのtryブロック内の

Thread.sleep(2000); 

あなたは自分のスレッドを一時停止する場合は、使用。

+0

@リザードそれはあなたが私に提案する私の名誉です。ありがとう –

+0

さて、オブジェクトをロックするにはどうすればいいですか? –

+0

@ Nobleleader13245:これはしばしば 'synchronized'ブロックを伴います。 – Mat

関連する問題