2015-04-17 6 views
0

Ошибка: «К сожалению, myAppname разобрался».Я получаю сообщение об ошибке при выходе из своего приложения

Я делаю игру в SurfaceView и использую много растровых изображений и звуков. Мой вопрос: что может вызвать эту ошибку? У меня есть Atopd() и выпущен() звуки, когда я выхожу. Есть поток, который работает, я не знаю, должен ли я его убить или нет, и если да, то как ?. Растровые изображения все еще загружаются, когда я выхожу, я должен их освободить, и если да, то как?

Я пробовал разместить изображение ошибки в DDMS, но, похоже, у меня нет достаточного количества точек для размещения изображения ... это смешно.

** ddms говорит;

E/AndroidRuntime(2009): FATAL EXCEPTION: Thread-3207 
E/AndroidRuntime(2009): java.lang.NullPointerException 
E/AndroidRuntime(2009):  at com.example.spaceinvaders.MainActivity$GameView.onDraw(MainActivity.java:478) 
E/AndroidRuntime(2009):  at com.example.spaceinvaders.GameLogic.run(GameLogic.java:68)** 

Line 68 в игровой логики вызывает; this.mGameView.onDraw (холст); Линия 478 в основной деятельности: canvas.drawColor (Color.rgb (38, 132, 3));

Это класс GameLogic:

public class GameLogic extends Thread 
{ 
    private SurfaceHolder surfaceHolder; 
    private GameView mGameView; 
    private int game_state; 
    public static final int PAUSE = 0; 
    public static final int READY = 1; 
    public static final int RUNNING = 2; 

    public GameLogic(SurfaceHolder surfaceHolder, GameView mGameView) 
    { 
     super(); 
     this.surfaceHolder = surfaceHolder; 
     this.mGameView = mGameView; 
    } 

    public void setGameState(int gamestate) 
    { 
     this.game_state = gamestate; 
    } 

    public int getGameState() 
    { 
     return game_state; 
    } 


    @SuppressLint("WrongCall") 
    @Override 
    public void run() 
    { 
     Canvas canvas; 

     while (game_state == RUNNING) 
     { 
      canvas = null; 


      try 
      { 
       canvas = this.surfaceHolder.lockCanvas(); 
       long time_orig =System.currentTimeMillis(); 
       synchronized (surfaceHolder) 
       { 
        //this.mGameView.update(); 
        //this.mGameView.onDraw(canvas); 
        try 
        { 
         Thread.sleep(10);//(4); 
        } 
        catch (InterruptedException e1) 
        { 
        } 

        long time_interim = System.currentTimeMillis(); 
        int adj_mov = (int)(time_interim - time_orig); 
        mGameView.update(adj_mov); 
        time_orig = time_interim; 
        this.mGameView.onDraw(canvas); 
       } 
      } 

      finally 
      { 
       if (canvas != null) 
       { 
        surfaceHolder.unlockCanvasAndPost(canvas); 
       } 
      } 
     } 
    } 
} 

игра работает отлично, пока я не ударил кнопку, чтобы выйти обратно.

@ Nobu Games: 1.) in MainActivity;

public void surfaceDestroyed(SurfaceHolder holder) 
{ 
    mGameLogic.setGameState(GameLogic.PAUSE); 
} 

2.) в GameLogic

  try 
      { 
       Thread.sleep(10);//(4); 
      } 
      catch (InterruptedException e1) 
      { 
      } 

      long time_interim = System.currentTimeMillis(); 
      int adj_mov = (int)(time_interim - time_orig); 
      mGameView.update(adj_mov); 
      time_orig = time_interim; 
      if(canvas != null) 
       this.mGameView.onDraw(canvas); 
     } 
    } 

    finally 
    { 

.... проблема сохраняется. Я благодарю вас за ваше время и знания.

сейчас это журнал дает мне эту ошибку:

04-17 15:08:42.592: E/AndroidRuntime(16286): FATAL EXCEPTION: main 
04-17 15:08:42.592: E/AndroidRuntime(16286): android.app.SuperNotCalledException: Activity {com.example.spaceinvaders/com.example.spaceinvaders.MainActivity} did not call through to super.onDestroy() 
04-17 15:08:42.592: E/AndroidRuntime(16286): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3300) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3329) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at android.app.ActivityThread.access$1200(ActivityThread.java:134) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at android.os.Looper.loop(Looper.java:137) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at android.app.ActivityThread.main(ActivityThread.java:4722) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at java.lang.reflect.Method.invokeNative(Native Method) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at java.lang.reflect.Method.invoke(Method.java:511) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
04-17 15:08:42.592: E/AndroidRuntime(16286): at dalvik.system.NativeStart.main(Native Method) 

Это мой первый пост, и хотел бы поблагодарить всех вас за помощь, которую вы предоставляете новичкам. LB

+2

Сообщите свой код, где возникла ошибка. Также отправьте свой логарифм. Это поможет нам помочь вам. –

+0

thats proble, я не знаю, что ошибка. У меня есть несколько строк кода ... –

+1

Точка проверки вывода logcat - это определить, где происходит ошибка, а также ее характер. –

ответ

0

Если у вас @Override метод onDestroy(), тогда вам необходимо позвонить в super.onDestroy() в onDestroy().

android.app.SuperNotCalledException: Activity {com.example.spaceinvaders/com.example.spaceinvaders.MainActivity} did not call through to super.onDestroy() 
+0

@ Вернемся, спасибо, я наложил это. Я должен помнить об активности Lifecycles. –

Смежные вопросы