java - serialized a game state that had key events. retrieving a copy is without my keyboard events? -


after reading serialization , i/o maps, decided useful use create way of saving , loading game map... however, not working way i'd to.

here constructor map(rpggame) object, not confused rpgmap object inside

public rpggame(rpgmap newmap, rpgcursor newcursor){         map=newmap;         cursor=newcursor;         //drawer=this.getgraphics();         keylistener listener=new keylistener()             {public void keyreleased(keyevent e){                 cursor.keyreleased(e);                 //if(e.getkeycode()==keyevent.vk_enter){                     //repaint();                     //}                  }             public void keypressed(keyevent e){                 boolean determiner=cursor.keypressed(e);                 rpgchar charref=cursor.getselected();                 //repaint();                 if(charref!=null&&(e.getkeycode()!=keyevent.vk_shift&&e.getkeycode()!=keyevent.vk_enter&&e.getkeycode()!=keyevent.vk_e&&e.getkeycode()!=keyevent.vk_b)){                     rpgmapsquare squaretopaint=map.themap[cursor.getycoord()][cursor.getxcoord()];                     //squaretopaint.paint(drawer, true);                     squaretopaint.paintbluearrow(drawer, cursor.getdirection());                     //cursor.paint(drawer);                 }                 else{                     repaint();                 }              }              public void keytyped(keyevent e){             }         };         addkeylistener(listener);         setfocusable(true);     }​ 

now, see, there key listener in there, , sends event cursor class.

this code construct rpggame object(from within rpggame class's main method)

system.out.println("which map want?");         scanner input=new scanner(system.in);         string answer=input.nextline();          rpggame gamestuff;         if(answer.compareto("forest")==0){             rpgmap forestmap=new rpgmap(8, 8, forestmapdata);//creates new map             rpgcursor cursor=new rpgcursor(forestmap);//creates new cursor object reference map             gamestuff=new rpggame(forestmap, cursor);//creates new window map , cursor             forestmap.registercanvas(gamestuff);//gives reference window map             cursor.registercanvas(gamestuff);//gives reference window cursor         }         else {//if(answer.compareto("mountain")==0){             rpgmap mountainmap=new rpgmap(8, 8, mountainmapdata);             rpgcursor cursor=new rpgcursor(mountainmap);             gamestuff=new rpggame(mountainmap, cursor);             mountainmap.registercanvas(gamestuff);             cursor.registercanvas(gamestuff);         } ​ 

then use save method in same main method `

public void saveit(string filename) throws ioexception{         objectoutputstream oos=null;         try{             oos=new objectoutputstream(new fileoutputstream(filename+".dat"));             oos.writeobject(this);         }         catch(ioexception e){             e.printstacktrace();         }         finally{             oos.flush();         }     }​ 

to create .dat file rpggame object constructed

from class (dummyclass because want reproduce old map it), call loading method rpggame object "stuff.dat" file.

public class dummyclass{     public static void main(string[] arg){         rpggame newgame=null;         try{             newgame=load("stuff.dat");         }         catch (ioexception e){             e.printstacktrace();         }         jframe dummyframe=new jframe("copy");         dummyframe.add(newgame);         dummyframe.setvisible(true);         dummyframe.setdefaultcloseoperation(jframe.exit_on_close);     }     public static rpggame load(string file) throws ioexception{         objectinputstream ois=null;         rpggame gamedata=null;         try {                     ois = new objectinputstream(new fileinputstream(file));                     gamedata=(rpggame)ois.readobject();             }          catch(ioexception ex) {             system.out.println("sorry, there error reaching file");             //ex.printstacktrace();         }         finally{             ois.close();             return gamedata;         }     }​ 

after setting jframe , adding retrieved rpggame object, correct visual map. however, cannot use keyboard input move around cursor(as other stuff) on dummyclass's version of rpggame object. did somehow lose keylistener original copy in saving , reloading? appreciated. first dive keyboard input , serialization store , retrieve objects.

for information, did mark cursor, map, char classes, everything, serializable, if helps.

i think in scenario better off recreating keylistener after deserialization has completed. also, can't tell properties serialized , not why not try changing constructor this:

public rpggame(rpgmap newmap, rpgcursor newcursor){     map=newmap;      setcursor(newcursor); }​ private void setcursor(rpgcursor newcursor){     cursor=newcursor;     //drawer=this.getgraphics();     keylistener listener=new keylistener()         {public void keyreleased(keyevent e){             cursor.keyreleased(e);             //if(e.getkeycode()==keyevent.vk_enter){                 //repaint();                 //}              }         public void keypressed(keyevent e){             boolean determiner=cursor.keypressed(e);             rpgchar charref=cursor.getselected();             //repaint();             if(charref!=null&&(e.getkeycode()!=keyevent.vk_shift&&e.getkeycode()!=keyevent.vk_enter&&e.getkeycode()!=keyevent.vk_e&&e.getkeycode()!=keyevent.vk_b)){                 rpgmapsquare squaretopaint=map.themap[cursor.getycoord()][cursor.getxcoord()];                 //squaretopaint.paint(drawer, true);                 squaretopaint.paintbluearrow(drawer, cursor.getdirection());                 //cursor.paint(drawer);             }             else{                 repaint();             }          }          public void keytyped(keyevent e){         }     };     addkeylistener(listener);     setfocusable(true);  } 

now have seperated out keylistener registration should call after deserialization, don't think wise serialize key listeners, better served re-registering. remember serialization storing object graphs, isn't useful storing references input devices or things that:

public static rpggame load(string file) throws ioexception{     objectinputstream ois=null;     rpggame gamedata=null;     try {                 ois = new objectinputstream(new fileinputstream(file));                 gamedata=(rpggame)ois.readobject();                 gamedata.setcursor(gamedata.cursor);         }      catch(ioexception ex) {         system.out.println("sorry, there error reaching file");         //ex.printstacktrace();     }     finally{         ois.close();         return gamedata;     } }​ 

Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -