0

私はframeAnimationを持っています.3秒ほどだけ開始したいのですが...そのため、3秒待機するスレッドを追加しましたが、例外に遭遇しました。

以前にスレッドで作業をしたことがないので、これを使用するのはこれが初めてです。誰か助けてもらえますか?

これは私のコードです:

    public void setTimerImage4Bot() throws Exception {
    Thread thread = new Thread();

    AnimationDrawable frameAnimation =    (AnimationDrawable)bot.getDrawable();
    frameAnimation.setCallback(bot);
    frameAnimation.setVisible(true, true);
    frameAnimation.start();
    Log.i("BaoAnh","START");
    thread.wait(3000);
    frameAnimation.stop();
    Log.i("BaoAnh","STOP");
    generateRandom();

    }

これはエラーです:

05-21 10:11:55.633: WARN/System.err(740): java.lang.IllegalMonitorStateException: object not locked by thread before wait()
05-21 10:11:55.633: WARN/System.err(740): at java.lang.Object.wait(Native Method)
05-21 10:11:55.633: WARN/System.err(740): at java.lang.Object.wait(Object.java:326)
05-21 10:11:55.633: WARN/System.err(740): at com.example.PaperCissorsRock.game.setTimerImage4Bot(game.java:63)
05-21 10:11:55.633: WARN/System.err(740): at com.example.PaperCissorsRock.game$1.onClick(game.java:44)
05-21 10:11:55.633: WARN/System.err(740): at android.view.View.performClick(View.java:2408)
05-21 10:11:55.633: WARN/System.err(740): at android.view.View$PerformClick.run(View.java:8816)
05-21 10:11:55.633: WARN/System.err(740): at android.os.Handler.handleCallback(Handler.java:587)
05-21 10:11:55.633: WARN/System.err(740): at android.os.Handler.dispatchMessage(Handler.java:92)
05-21 10:11:55.633: WARN/System.err(740): at android.os.Looper.loop(Looper.java:123)
05-21 10:11:55.633: WARN/System.err(740): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-21 10:11:55.643: WARN/System.err(740): at java.lang.reflect.Method.invokeNative(Native Method)
05-21 10:11:55.643: WARN/System.err(740): at java.lang.reflect.Method.invoke(Method.java:521)
05-21 10:11:55.643: WARN/System.err(740): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-21 10:11:55.643: WARN/System.err(740): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-21 10:11:55.643: WARN/System.err(740): at dalvik.system.NativeStart.main(Native Method)
4

2 に答える 2

2

あなたが使用することができますThread.sleep(3000);

ただし、Handler.postDelayedメソッドも使用することをお勧めします。postDelayed を使用すると、一定時間後に実行可能なタスクを実行できます

例えば

Handler handler = new Handler();
handler.postDelayed(new Runnable(){
   public void run(){
       do tasks which will be done after 3 seconds
   } 
},3000);
于 2013-05-21T03:34:50.323 に答える
0

このwaitメソッドは、オブジェクトの同期用です。少しだけ眠りたい場合は、 を使用してsleepください。

物体

public final void wait (ロングミリ秒)

別のスレッドがこのオブジェクトの notify() または notifyAll() メソッドを呼び出すまで、または指定されたタイムアウトが期限切れになるまで、呼び出しスレッドを待機させます。このメソッドは、このオブジェクトのモニターを所有するスレッドによってのみ呼び出すことができます。スレッドがモニターの所有者になる方法については、notify() を参照してください。

あなたはモニターの所有者ではないため、エラーが発生しています。また、オブジェクトを待機することはあなたがしたいことではないため、そうすべきではありません。

これは静的関数であることを覚えておいてsleepください。それを使用するためにスレッド オブジェクトをインスタンス化する必要はありません。使用するだけです:

Thread.sleep (3000);
于 2013-05-21T03:35:34.053 に答える