android - Back to SurfaceView from other activity -


im making game aim kill zombies, , upgrade weapons.but have problem, when im trying pause game , go shop, have no problem when im trying game - application crash. here code:

   public gameview(context context) {          super(context);          gameloopthread = new gameloopthread(this);           getholder().addcallback(new surfaceholder.callback() {                  @override                 public void surfacedestroyed(surfaceholder holder) {                        boolean retry = true;                        gameloopthread.setrunning(false);                         while (retry) {                               try {                                     gameloopthread.join();                                     retry = false;                               } catch (interruptedexception e) {}                        }                 }                  @override                 public void surfacecreated(surfaceholder holder) {                        //createsprites();                         gameloopthread.setrunning(true);                        gameloopthread.start();                        thread1.start();                        thread_level.start();                        wielkosc_czcionki=getwidth()/25;                  }                  @override                 public void surfacechanged(surfaceholder holder, int format,                               int width, int height) {                 }          });             @suppresswarnings("deprecation")         void pause(){           if (!is_game) // not running         {                     paused=!paused;                     is_game=!is_game;             }             else{ // running                 is_game=!is_game;                 paused=!paused;                 startuj_sklep();                 //startuj_sklep();             }          }        thread thread_level = new thread(){         public void run(){             while(true){             if(akt_zabit%(int)level_zabit==0){             level++;                 level_zabit=level_zabit*1.5;             resp_time=resp_time-20;             pause();               }              }         }        };        void startuj_sklep(){       context context = getcontext(); // mysurfaceview/activity      intent intent = new intent(context, sklep.class);      int tab[]={dolary,zycie_gracza_akt,zycie_gracza_def,poj_mag,szybkosc_strzalu, reload_time_def};      intent.putextra("dane", tab);      context.startactivity(intent);   } 

so "pause" method making whole game stopped , using "startuj_sklep"(engish: start_shop). "startuj_sklep" method starts new activity. , turning new activity, when crash.

           back.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view v) {                 finish();              }         }); 

05-14 15:48:52.031: e/androidruntime(1272): fatal exception: main 05-14 15:48:52.031: e/androidruntime(1272): java.lang.illegalthreadstateexception: thread started 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.thread.checknotstarted(thread.java:871) 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.thread.start(thread.java:1025) 05-14 15:48:52.031: e/androidruntime(1272): @ morisson.zombieapocalypse.gameview$3.surfacecreated(gameview.java:149) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.surfaceview.updatewindow(surfaceview.java:571) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.surfaceview.onwindowvisibilitychanged(surfaceview.java:232) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.view.dispatchwindowvisibilitychanged(view.java:7682) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewgroup.dispatchwindowvisibilitychanged(viewgroup.java:1071) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewgroup.dispatchwindowvisibilitychanged(viewgroup.java:1071) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewgroup.dispatchwindowvisibilitychanged(viewgroup.java:1071) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1227) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:1004) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:5481) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer$callbackrecord.run(choreographer.java:749) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer.docallbacks(choreographer.java:562) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer.doframe(choreographer.java:532) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:735) 05-14 15:48:52.031: e/androidruntime(1272): @ android.os.handler.handlecallback(handler.java:730) 05-14 15:48:52.031: e/androidruntime(1272): @ android.os.handler.dispatchmessage(handler.java:92) 05-14 15:48:52.031: e/androidruntime(1272): @ android.os.looper.loop(looper.java:137) 05-14 15:48:52.031: e/androidruntime(1272): @ android.app.activitythread.main(activitythread.java:5103) 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.reflect.method.invokenative(native method) 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.reflect.method.invoke(method.java:525) 05-14 15:48:52.031: e/androidruntime(1272): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:737) 05-14 15:48:52.031: e/androidruntime(1272): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) 05-14 15:48:52.031: e/androidruntime(1272): @ dalvik.system.nativestart.main(native method)

the surfacecreated() callback in anonymous class in gameview attempting start thread running, you're getting

java.lang.illegalthreadstateexception: thread started 

add logging see when callbacks firing , when thread starting , stopping. give better sense of how app interacting system.

you may find this article of interest.

(i don't know if it's part of problem, recommend against making pause() method act toggle. should know whether call pause() expected pause or resume, , writing toggle creates unnecessary ambiguity. if game paused, , try pause second time, should ignore second request or report error, not try resume it.)


Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -