2011-09-11 5 views
0

私はしばらくの間働いている私のスプラッシュ画面でいくつかのエラーがあり、把握することはできません。私のスプラッシュ画面をスレッドよりも時間を取る良い方法はありますか?現在のスレッドで何が問題になっていますか?私のメディアプレーヤーオブジェクトの問題を見ることができますか?スプラッシュスクリーンスレッドのエラーをスローします。解決する方法? (コードとエラーが含まれています)

私のスプラッシュクラスの勇気を投稿しました。うまくいけば、私はこれらの問題についていくつかの方向性を得ることができます。これは、私がアプリを実行するときに動作しますが、私はエラーが発生したくないだけです。

-------------------------コード------------------- -----------

@Override 
public void onCreate(Bundle savedInstanceState) { 
......onCreate, hide window, and setting content view....... 
     // Play Sound for startup 
     mpSplash = MediaPlayer.create(this, R.raw.splashscream); 
     mpSplash.start(); 
     final Splash splash = this; 
     logoTimer = new Thread(){ 
     public void run(){ 
      try { 
       synchronized(this){ 
        // Wait given period of time or exit on touch 
        wait(4500); 
       } 
      } 
      catch(InterruptedException ex){ 
       ex.printStackTrace(); 
      } 
      finish(); 
      mpSplash.stop(); 
      mpSplash.reset(); 
      //mpSplash.release(); 
      //mpSplash.release(); 
      // Run next activity 
      Intent intent = new Intent(); 
      intent.setClass(splash, Game.class); 
      startActivity(intent); 
      stop(); 
     } 
    }; 
    logoTimer.start(); 
} 
// Splash screen touch events 
@Override 
public boolean onTouchEvent (MotionEvent evt) 
{ 
    if(evt.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     // Stop the introduction sounds 
     mpSplash.stop(); 
     mpSplash.reset(); 
     //mpSplash.release(); 
     //mpSplash.release(); 
     synchronized(logoTimer){ 
      logoTimer.notifyAll(); 
     } 
    } 
    return true; 
} 

------------------------------エラー-----------------------------

09-11 21:50:04.644: ERROR/MediaPlayer(460): stop called in state 1 
09-11 21:50:04.644: ERROR/MediaPlayer(460): error (-38, 0) 
09-11 21:50:04.654: ERROR/global(460): Deprecated Thread methods are not supported. 
09-11 21:50:04.654: ERROR/global(460): java.lang.UnsupportedOperationException 
09-11 21:50:04.654: ERROR/global(460):  at java.lang.VMThread.stop(VMThread.java:85) 
09-11 21:50:04.654: ERROR/global(460):  at java.lang.Thread.stop(Thread.java:1379) 
09-11 21:50:04.654: ERROR/global(460):  at java.lang.Thread.stop(Thread.java:1344) 
09-11 21:50:04.654: ERROR/global(460):  at com.ss.lastzombie.Splash$1.run(Splash.java:61) 

ありがとう!!

+0

エラーはコンテキストにありません。行番号はエラーが発生している場所を示します。あなたのコードでSplash.java:61を指摘する必要があります。 –

+0

@Charles Line 61はstartActivity(intent)です。 – KRB

答えて

3

あなたのスレッドでstop()に電話しないでください。これは推奨されない方法です(VMの不安定化を招く)ので、必要ありません。 (run()メソッドが返ってきたらスレッドは終了します)。スプラッシュ・アクティビティについては、おそらくfinish()と呼ぶつもりです。それは意味をなさないでしょう。

フォームのためだけに、ワーカースレッドの代わりにstartActivityfinishをメインスレッドで呼び出すことができます。これを行うには、runOnUIThread()を使用してRunnableをポストし、Runnableから2つのメソッドを呼び出します。

+0

stop()を削除するとスレッドエラーが修正されました。ありがとう。今すぐあなたの答えの2番目の部分に。 runOnUIThread()の使用の理由を説明できますか? 「実行可能」とは何かを説明できますか?私はちょっと新しく、理解しようとしています。ありがとう!!! – KRB

+0

[Runnable](http://developer.android.com/reference/java/lang/Runnable.html)は、単一のメソッド 'void run();'を定義するインタフェースです。 Runnableを実装すると宣言されたオブジェクトは、Javaのさまざまな場所、特にAndroidで使用できます。例えば、スレッド自体をサブクラス化するのではなく、 'new Thread(aRunnable).start()'を使ってスレッドを作成することができます。 UIスレッドでの実行については、[Painless Threading](http://developer.android.com/resources/articles/painless-threading.html)の記事を参照してください。 –

関連する問題