20. februar 2005 - 23:57 Der er 12 kommentarer og
1 løsning

Gem til fil

Hej alle derude...

Hvad er der galt her...min "data.dat" fil gemmer en lille sjat (6 kb), men langtfra nok.
Mine ArrayLists bliver ikke gemt. Jeg kan ihvertfald ikke kalde dem frem igen.

  public Kontrol(GUI gui)
  {
    this.gui = gui;
   
   
    try
    {
      FileInputStream fis = new FileInputStream("data.dat");
      ObjectInputStream ois = new ObjectInputStream(fis);
      dataList = (DataList)ois.readObject();
      ois.close();
     
    }catch(Exception e)
    {
    dataList = new DataList(this);
    }
    armorList = new ArmorList();
    weaponList = new WeaponList();
  }
 
  public void gem()
  {
    try{
    FileOutputStream fos = new FileOutputStream("data.dat");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(dataList);
    oos.close();
   
    }catch(Exception e)
    {
     
    }

Min DataList klasse  er som følgende;

public class DataList implements Serializable
{
  CharacterList characterList;
  Kontrol control;
   
  public DataList(Kontrol control)
  {
    this.control = control;
    characterList = new CharacterList(this);
  }
  public CharacterList getCharacterList()
  {
    return characterList;
  }
}

Min CharacterList klasse instantiere en række nye ArrayLists, hvor  disses (PersonKlasser) alle implementere Serielizable
Avatar billede kalp Novice
21. februar 2005 - 00:02 #1
måske skal Kontrol også implementere Serielizable... du har den jo med i din datalist klasse.
Avatar billede snoop_one Nybegynder
21. februar 2005 - 00:09 #2
jep, er enig med kalp. Er din CharacterList også Serializable?
21. februar 2005 - 00:21 #3
Beklager kalp ..det var ikke det, der var grunden... men jeg har dog rettet det...

Jeg mener dog, at man kun behøver at implementere Serializable i den først komne klasse. Resten af klasserne bliver automatisk serieliseret...jeg har bare skrevet det for en sikkerheds skyld...

og til snoop one...min CharacterList er serialiseret
Avatar billede kalp Novice
21. februar 2005 - 00:22 #4
jeghaderorganisation>> Alt der overhovedet skal gemmes på disk(af objekter) skal implementere Serielizable
21. februar 2005 - 00:29 #5
Tja, det mener jeg ikke du har ret i, men jeg er dog usikker selv, så derfor har jeg imlementeret det i dem alle.
Avatar billede kalp Novice
21. februar 2005 - 00:31 #6
Du skal implementere det i alle dine klasser du selv har lavet som skal gemmes.

Måske er det du tænker på ArrayList klassen og mange andre fra API'et.. dem behøver du ikke skrive det ved for de er allerede sat op til at kunne gemmes på disk:)

Men du har jo en java bog.. slå det op:) selvfølgelig har jeg ret;)
21. februar 2005 - 00:33 #7
Ja ok, jeg må give dig ret...men det virker sku stadig ikke
Avatar billede kalp Novice
21. februar 2005 - 00:41 #8
svært for lige mig at vurdere sådan noget kode:) men lige et spørgsmål

characterList = new CharacterList(this);

nu kan vi ikke se hvordan din characterList fungere, men hvorfor skal man have DataList list med som parameter?
Avatar billede kalp Novice
21. februar 2005 - 00:44 #9
hvis alt implementere serializable så vil jeg kigge på hvornår du kalder din gem() metode.. måske kalder du den for tidligt.
21. februar 2005 - 00:45 #10
Det er fordi jeg kalder en metode fra characterListen gennem dataListen til kontrolKlassen. ..Det er måske lidt sjusket
Avatar billede kalp Novice
21. februar 2005 - 00:58 #11
som jeg sagde.. overvej hvornår du kalder din gem() metode... kald den når alt er oprettet! Og ellers skal alle dine klasser/objekter der skal gemmes på disk implementere serializable.

Hvis det stadig ikke hjælper så tror jeg det fordi der går nogen objekter tabt
her

characterList = new CharacterList(this);

du siger selv den skal oprette en serie arraylists... sikker på de bliver gemt?
21. februar 2005 - 01:06 #12
Ja...så længe jeg ikke lukker ned for programmet, så virker det fint med at hente ting oprettet i forskellige Arrays...

Jeg har nu implementeret Serializable i samtlige 21 klasser undtagen main() klassen. Der virker, så der er vel bare én vej,  hvilket er at fjerne det igen én efter én...

Tak for hjælpen...(svar)
Avatar billede kalp Novice
21. februar 2005 - 01:09 #13
Ja... men ALLE de objekter/klasser som du vil have skal gemmes skal implementere serializable.. (dem du laver altså) hvis du anvender java's klasser skal du lige kigge i api'et om de implementere serializable hvis ja så behøver du ikke skrive det også
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester