2013-12-13 2 views
1

내 렌더링 클래스에서 건배하려고합니다. 어떻게 작동시킬 수 있습니까?건배를하면 예기치 않게 게임이 종료됩니다.

12-13 17:14:59.856: E/AndroidRuntime(17521): FATAL EXCEPTION: GLThread 1323 

12-13 17:14:59.856: E/AndroidRuntime(17521): Process: com.damienrenner.spacefruitshooter, PID: 17521 

12-13 17:14:59.856: E/AndroidRuntime(17521): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

12-13 17:14:59.856: E/AndroidRuntime(17521): at android.os.Handler.<init>(Handler.java:200) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at android.os.Handler.<init>(Handler.java:114) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at android.widget.Toast$TN.<init>(Toast.java:327) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at android.widget.Toast.<init>(Toast.java:92) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at android.widget.Toast.makeText(Toast.java:241) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at com.damienrenner.spacefruitshooter.GRenderer.timer(GRenderer.java:278) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at com.damienrenner.spacefruitshooter.GRenderer.onDrawFrame(GRenderer.java:291) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1523) 

12-13 17:14:59.856: E/AndroidRuntime(17521): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

감사합니다 : 가 여기 내 코드는 다음

public class GRenderer extends Game implements Renderer 
{ 

    public void timer() 
    { 
     Game.currentGameTime = System.currentTimeMillis(); 
     Game.ellapsedTime = Game.currentGameTime - Game.gameStartTime; 

     if (Game.ellapsedTime > 10000) 
     { 
      // THIS IS WHEN The GAME SHOULD END 
      Toast.makeText(Game.context, "10Seconds", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onDrawFrame(GL10 gl) // when drawing to screen 
    { 
     timer(); 
    } 
} 

내 로그 캣입니다 (내 활동이 게임이라고합니다) (무관 한 덩어리를 생략 필자)!

로그 캣 켄 늑대의 구현 후 :

12-13 18:00:14.152: E/AndroidRuntime(18966): FATAL EXCEPTION: GLThread 1365 

12-13 18:00:14.152: E/AndroidRuntime(18966): Process: com.damienrenner.spacefruitshooter, PID: 18966 

12-13 18:00:14.152: E/AndroidRuntime(18966): java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity 

12-13 18:00:14.152: E/AndroidRuntime(18966): at com.damienrenner.spacefruitshooter.GRenderer.timer(GRenderer.java:279) 

12-13 18:00:14.152: E/AndroidRuntime(18966): at com.damienrenner.spacefruitshooter.GRenderer.onDrawFrame(GRenderer.java:300) 

12-13 18:00:14.152: E/AndroidRuntime(18966): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1523) 

12-13 18:00:14.152: E/AndroidRuntime(18966): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

12-13 18:00:16.204: I/Process(18966): Sending signal. PID: 18966 SIG: 9 

답변

2

토스트는 UI 스레드에서 호출해야합니다. 그러나, 나는이 구현 한 Android: Toast in a thread

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)

+0

:

((Activity) Game.context).runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(Game.context, "10Seconds", Toast.LENGTH_SHORT).show(); } }); 

더 많은 정보를 원하시면 여기 : Game.context 가정

는 다음과 같이 귀하의 코드를 변경, 호출 Activity에 대한 참조를 보유하고 게임은 여전히 ​​강제 종료됩니다 ('불행히도 게임이 중지되었습니다') – RennerStudios

+0

스택 추적에서 같은 오류가 있습니까? –

+0

아니요, 질문에 logcat을 추가했습니다. – RennerStudios

관련 문제