Avatar billede korup Nybegynder
20. februar 2001 - 11:39 Der er 24 kommentarer og
1 løsning

Problem med at gemme en Vector !!!!

Jeg sidder her og nørker med et lille problem jeg skal gemme min vector og får en fejl som hedder:

java.io.NotSerializableException: bog

Koden er som følder:

class Vektor
{
  Vector bog;
 
  public Vektor()
  {
    bog = new Vector();   
  }
  public void add(bog med)
  {
  bog.addElement(med);
  }
 
  public void udskriv(int bog_nr)
  {
    int fundet = 1; 
    if (bog_nr == 0000)
      {
      for (int i=0; i<bog.size();i++)
        {
        bog current = (bog) bog.elementAt(i);
        current.bog_oplysning();
        }
      }
    else
      {
      for (int i=0; i<bog.size();i++)
        {
        bog current = (bog) bog.elementAt(i);
        if (current.bog_nummer() == bog_nr)
          {
          current.bog_oplysning();
          fundet = 1;     
          }
        else 
          fundet = 0;
        }
        if (fundet == 0)
          System.out.println(\"Bog ikke fundet\");
      }
    }
  public void gem()
  {
    try
      {
          File outFile = new File(\"bog.dat\");
        FileOutputStream outFileStream = new FileOutputStream(outFile);
        ObjectOutputStream outObjectStream = new ObjectOutputStream(outFileStream);
          outObjectStream.writeObject(bog);
         
         
      }
    catch(IOException e)
      {
        System.out.println(e);
      }   
    }
 
  public void hent()
  {
    try
    {
      File inFile = new File(\"bog.dat\");
      FileInputStream inFileStream = new FileInputStream(inFile);
      ObjectInputStream inObjectStream = new ObjectInputStream(inFileStream);
   
      bog = (Vector) inObjectStream.readObject();
    }
    catch(IOException e)
    {
      System.out.println(e);
    }
    catch(ClassNotFoundException e)
    {
      System.out.println(e);
    }   
  }
 
 
  public static void main(String arg[])
  {
   
    bog a, b, c;
    Vektor mv = new Vektor();
   
    mv.hent();
    //a = new bog();
    mv.add(new bog(1000, \"Johan\", \"Gys\", \"Den glade sejler\"));
    //b = new bog();
    mv.add(new bog(1001, \"Bjarne\", \"Gys\", \"Happy øksemord\"));
    //c = new bog(1010, \"Allan\", \"Krimi\", \"Mordet i potteplanten\");
    //mv.add(c);
    mv.udskriv(0000);
    mv.gem();
   
   
  }
}


Håber at der er nogen der kan hjælpe..

/Allan Kørup
Avatar billede disky Nybegynder
20. februar 2001 - 11:42 #1
lav

class Vektor

om til

class Vektor implements Serializable
Avatar billede disky Nybegynder
20. februar 2001 - 11:47 #2
din    bog a, b, c;
   
kan ikke virke, da der ikke findes en type der hedder \'bog\'
Avatar billede disky Nybegynder
20. februar 2001 - 11:48 #3
Har du en klasse der hedder \'bog\' også ?

Eller kan du ikke skrive
  bog a, b, c;

du har kun defineret en variabel af typen vector som hedder \'bog\' det er ikke nok til at du kan det du prøver på

Avatar billede korup Nybegynder
20. februar 2001 - 11:50 #4
bog er en Vector og ligger i konstruktøren

det med at lave:
class Vektor
om til
class Vektor implements Serializable
Det virker ikke helt.

Andre ideer?
Det håber jeg!!

/korup
Avatar billede korup Nybegynder
20. februar 2001 - 11:52 #5
Her er min klasse bog..


class bog
{
  private int bog_nr;
  private String Forfatter;
  private String Genre;
  private String Titel;
  String TEST;
 
 
  public bog(int nr, String navn, String hvad, String titel)
    {
    bog_nr = nr;
    Forfatter = navn;
    Genre = hvad;
    Titel = titel;
   
    }
  public void bog_oplysning()
    {
    System.out.println(\"----------------------------------\");
    System.out.println(\"Bog Nummer: \" + bog_nr);
    System.out.println(\"Forfatter: \" + Forfatter);
    System.out.println(\"Genre: \" + Genre);
    System.out.println(\"Titel: \" + Titel);
    }
  public int bog_nummer()
    {
    return bog_nr;
    } 
}

Korup
Avatar billede disky Nybegynder
20. februar 2001 - 11:53 #6
du kan stadigvæk ikke lave en variable der er defineret således:

Vector bog;

og så senere tro du kan lave variabler af den igen med:

bog a,b,c;
Avatar billede disky Nybegynder
20. februar 2001 - 11:55 #7
jeg kan godt compile den kode uden fejl
Avatar billede korup Nybegynder
20. februar 2001 - 11:57 #8
Kan du også kører det?

Avatar billede korup Nybegynder
20. februar 2001 - 11:58 #9
Jeg kan også compile koden fejlen kommer først når programmet køres!!
Avatar billede disky Nybegynder
20. februar 2001 - 12:26 #10
lav
class bog
om til
class bog implements Serializable

og
class Vektor
om til
class Vektor implements Serializable

Så kan det compiles og køres
Avatar billede pstric Nybegynder
20. februar 2001 - 12:31 #11
Husk at navngive dine klasser med stort begyndelsesbogstav.

class Bog {
...

Du har jo både en variabel der hedder bog og en klasse der hedder bog. Det er at bede om problemer.
Avatar billede pstric Nybegynder
20. februar 2001 - 12:31 #12
Husk at navngive dine klasser med stort begyndelsesbogstav.

class Bog {
...

Du har jo både en variabel der hedder bog og en klasse der hedder bog. Det er at bede om problemer.
Avatar billede disky Nybegynder
20. februar 2001 - 12:34 #13
pstric:

Ja men det har ingen betydning her, men det er korrekt at det kan forvirre andre der skal rode med koden.
Avatar billede pstric Nybegynder
20. februar 2001 - 12:56 #14
disky>> Se lige bog current = (bog) bog.elementAt(i); det er jo ikke særlig læsevenligt.

Derudover har du ret i at det ikke er det der er problemet her, men det er vel det, der har fået dig til fejlagtigt (?) at skrive at han skal lave class Vektor om til class Vektor implements Serializable
Avatar billede disky Nybegynder
20. februar 2001 - 12:59 #15
ja det skulle vel være nok at lave \'bog\' om til at implementere det.

Men det skader ikke at implementerer det i begge klasser
Avatar billede pstric Nybegynder
20. februar 2001 - 13:08 #16
Nej men det viser vel hvorfor det er vigtigt at skrive koden så den er let at læse ;-)
Avatar billede disky Nybegynder
20. februar 2001 - 13:09 #17
en helt anden ting.

lav
    catch(IOException e)
    {
      System.out.println(e);
    }

om til
    catch(IOException e)
    {
      e.printStackTrace();
    }


Så for du en bedre exception beskrivelse.
Avatar billede disky Nybegynder
20. februar 2001 - 13:10 #18
pstric:

Nej, grunden til jeg foreslog det andet var at jeg på det tidspunkt ikke viste at han glemte at fortælle der manglede en klasse :)

SÅ der så ud som der var mange flere fejl i koden, end bare den han nævnte.
Avatar billede pstric Nybegynder
20. februar 2001 - 13:14 #19
Det underbygger vist bare min pointe om navngivningen. Hvis klassen havde heddet Bog i stedet for bog, hvade du med det samme set, at det drejede sig om en klasse, han ikke viste implementeringen af.
Avatar billede disky Nybegynder
20. februar 2001 - 13:15 #20
Ja eller han var en nybegynder der bare ikke viste at de eksemåpel han havde tastet ind fra en bog, var indtastet forkert.
Avatar billede korup Nybegynder
20. februar 2001 - 14:22 #21
Hej Gutter jeg har løst problemet selv

Ellers tak for hjælpen eller!!

/korup

Avatar billede pstric Nybegynder
20. februar 2001 - 16:50 #22
korup>> Må vi ikke få at vide hvordan du løste problemet uden Serializable? Hvis du har brugt Serializable så virker det ikke helt rimeligt, at du har afvist disky\'s svar.

Derudover er det nok meget godt, at du afviste mit svar. Jeg har en fæl mistanke om at eksperten ville have trukket pointene 2 gange fra din konto, når nu svaret stod der to gange. Og jeg trykkede altså kun én gang på udfør.
Avatar billede korup Nybegynder
20. februar 2001 - 19:37 #23
Jo jeg vil lige sige at jeg vil gerne give pointene til disky... Hvis han lige svare med et eller andet igen..
UPS... JEg har lige læst det der blev skrevet igen og undskylder det er sådan jeg har løst det og nu virker det fint...

Så disky jeg skylder dig lige 100 p,, skriv lige noget så jeg kan give dig dem!!!

/Korup
Avatar billede korup Nybegynder
28. februar 2001 - 09:49 #24
jj
Avatar billede elisamarie Nybegynder
07. november 2001 - 21:12 #25
Jeg har brug for noget hjælp til programmering, noget gui og nogen metoder jeg vil gerne betale for det var det noget for en af jer ???
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