25. februar 2005 - 01:27Der er
39 kommentarer og 1 løsning
Objekt serielisering vedr. input Stream
Hej alle..
hvis man benytter sig af try { FileInputStream fis = new FileInputStream("data.dat"); ObjectInputStream ois = new ObjectInputStream(fis); characterList = (CharacterList)ois.readObject(); ois.close();
}catch(Exception e){ System.out.println(e); characterList = new CharacterList(); }
hvordan virkder den egentligt...
Er det sådan at de følgende klasser der har implements Serializable, bliver instantieret på ny...altså for geninlæst deres konstruktører. Eller er de der bare til fri afbenyttelse.
Jeg har nemlig et problem med at en reference mellem to klasser går tabt...og kun efter at jeg har geninlæst dem fra fil.??
referencen, der går tabt er til denne klasse...dvs jeg kan godt finde den men jeg kan ikke benytte mig af f.eks. public void add_c(final Component c)... og af de mouseEvent, der er implementeret
public class CharIcon implements Serializable { Character character; ImageIcon imageicon; String iconname; JLabel charLabel;
public CharIcon(Character character, String iconname) { this.iconname = iconname;
imageicon = new ImageIcon(iconname); charLabel = new JLabel(imageicon);
if ( e.getClickCount() == 2) dobbeltKlik(e); } }); charLabel.setVisible(true);
add_c(charLabel); }
public void add_c(final Component c) { c.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent m) { c.setLocation((c.getX()+m.getX())-(imageicon.getIconWidth()/2),(c.getY()+m.getY())-(imageicon.getIconHeight()/2)); }}); //this.character.characterList.control.gui.desktop.add(c);
Jeg kalder denne klassen fra klassen Character med charIcon = new CharIcon(this, iconname); i konstruktøren. Og selvfølelig med referencen CharIcon charIcon;
Men som jeg sagde er det højst sandsynligt ikke referencen til klassen, der går tabt, men public void add_c(final Component c) metoden , samt public void mouseClicked(MouseEvent e)
Den er svær at gennemskue. Jeg er lidt usikker på om konstruktøren bliver kørt igen som du spørger om, men tror det ikke for man gemmer jo et objekt og hiver et objekt op igen.
hmm.. du velkommen til at smide mere kode herind der er relevant er sikker på andre også vil være taknemmelige :)
Min character klasse er her....minus en masse set/get metoder
public class Character implements Serializable { ArrayList weaponListCha; ArrayList armorListCha; CharIcon charIcon; private String name; private String iconname; private int hitpoints; private int pp; private int ob; private int obMod; private int db; private int dbMod; private int offBonus; private int defBonus; private int penelty; private int hitsRnd; private int stunRnd; private int proneRnd; private boolean shield; private boolean surpriced; private boolean stunned; private boolean prone; private boolean largeCreature;
public Character(String name, String iconname, int hitpoints, int pp, int db) { this.name = name; this.hitpoints = hitpoints; this.pp = pp; this.db = db; this.iconname = iconname; weaponListCha = new ArrayList(); armorListCha = new ArrayList(); charIcon = new CharIcon(this, iconname); //setIcon(iconname); }
public JLabel getIcon() { return charIcon.charLabel;
}
public void addWeaponCha(String type, int ob, String attack, String primCrit, String secCrit, String obMod, int fumble) { //Character r = (Character)characterList.arrCharacter.get(n); weaponListCha.add(new WeaponCha(type, ob, attack, primCrit, secCrit, obMod, fumble)); }
public void addArmorCha(String type) { //Character r = (Character)characterList.arrCharacter.get(n); armorListCha.add(new ArmorCha(type)); }
Fint.. så var det før egentlig også rigtigt:) (og koden ser lysere ud for mig nu hehe)
Nu læser jeg det som om du prøver at returnere en charLabel til din desktoppane.. og den har i sig selv ingen metoder og alt det du gerne vil have fat i.. det er jo kun en jlabel!
jeg tror jeg har svaret...men jeg forstår det ikke helt..prøv at se her:
Serialization It is important to note that only AWT listeners which conform to the Serializable protocol will be saved when the object is stored. If an AWT object has listeners that aren't marked serializable, they will be dropped at writeObject time. Developers will need, as always, to consider the implications of making an object serializable. One situation to watch out for is this:
Jeg tror sku jeg beholder pointene selv...jeg er ved at løbe tør..;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.