2012-01-10 32 views
0

スプラッシュ画面に問題が発生しています。それはかなり大丈夫ですが、次のアクティビティに行き、タイムドアニメーションの後にクラッシュします。ここに私のコードは次のとおりです。スプラッシュ画面がクラッシュする

public class SplashScreen extends Activity { 
final static int DURATION = 2000; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    splashWelcome(DURATION); 
} 

//Run the splash screen for given time limit 
protected void splashWelcome(final int limit) { 
    Thread splashThread = new Thread() { 
     @Override 
     public void run() { 
      try { 
       int waited = 0; 
       while (waited < limit) { 
        sleep(100); 
        waited += 100; 
       } 
      } catch (InterruptedException e) { 
       Log.d("SplashScreen Error:", e.getMessage().toString()); 
      } finally { 
       Intent i = new Intent(getApplicationContext(), Main.class); 
       startActivity(i); 
       finish(); 
      } 

     } 
    }; 
    splashThread.start(); 
} 

}

これはエラーです:

01-10 12:23:57.835: ERROR/AndroidRuntime(19092): FATAL EXCEPTION: Thread-10 
01-10 12:23:57.835: ERROR/AndroidRuntime(19092): java.lang.NullPointerException 
01-10 12:23:57.835: ERROR/AndroidRuntime(19092):  at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100) 
01-10 12:23:57.835: ERROR/AndroidRuntime(19092):  at com.fab.quotes.SplashScreen$1.run(SplashScreen.java:36) 
01-10 12:23:57.835: WARN/ActivityManager(114): Force finishing activity com.fab.quotes/.Main 
+1

これは、私=新しいテント(this.class、Main.class)意図すべきではありません;?それを試しましたか? – kosa

答えて

1

はあなたがスレッド内getApplicationContext()を呼んでいる

Intent i = new Intent(SplashScreen.this, Main.class); 
0

を使用してみてください。

は交換してみてください:

Intent i = new Intent(getApplicationContext(), Main.class); 

で:

Intent i = new Intent(SplashScreen.this, Main.class); 
+0

それは働いた。すばらしいです!その間、私はいつも働いていたのでgetApplicationContext()メソッドを使うことができませんでした(私はこれまでにスレッド内で呼び出されたことはありません)。 – faby

+0

これは、ApplicationオブジェクトとActivityのような他のすべてのトップレベルクラスメインスレッドによって初期化されるため、別のスレッドでそれらにアクセスするとnull /クラッシュが返されます。私はそれを確信することはできません。私はnullを返す 'getApplicationContext()'を使っていくつかの問題に遭遇したので、私はいつも 'class.this'を使います。 http://developer.android.com/reference/android/content/Context.html#getApplicationContext%28%29にする必要がない限り、getApplicationContextの呼び出しを実際に行ってはいけないはずです。 – Ricky

関連する問題