Olioiden tallentaminen ja lukeminen

Minulla on HashMap olion sisältävä luokka joka pitäisi tallentaa, ja pystyä lataamaan, olen yrittänyt Object(In\Out)putStream:n avulla, mutta jostain syystä tiedostoa ei pysty lataamaan, -kyseessä on IOException, mutta minulla ei ole hajuakaan mistä se tulee?
-ArrayList sisältää Tapahtuma -olioita;

Miksiköhän tuo (Tapahtuma kirjasto) luokka antaa varoituksen Serializable:sta??

prkle kun ei missään ole oikeita virheitä ni ei voi edes arvaamalla yrittää!!
201242
Äänestä

Muut lukivat myös

Vastaukset 20

Vanhimmat

Vähän vaikea sanoa mitään, kun en tiedä mitään mistään Tapahtuma olioista. On varmaan taas jonkun oppilaitoksen kirjastoja/luokkia, prkle ;-) Miten et voi tietää mistä virhe tulee, sillä et kai nyt sentään lopeta ohjelmaa suoraan IOExceptioniin ilman että kutsuisit ensin printStackTrace:a? Sinulta jäi se varoituskin kirjoittamatta.


Käy lenkillä ja mieti hommaa uudelleen... Tai sitten lähdet baariin rauhoittumaan... Kysyt sitten maanantaina "koulussa" joltain miten homma menee... :-)

Äänestä
  • Kun virheilmoitus on null! En ole ikinä törmänny vastaavaan. Tapahtuma (luokka) -olio on ihan yksinkertainen tieto tapahtuman nimestä ajankohdasta ja tärkeydestä. Tapahtumakirjasto (luokka) on HashMap jossa Tapahtuma olioita säilytetään.

    Äänestä

  • sss kirjoitti:

    Kun virheilmoitus on null! En ole ikinä törmänny vastaavaan. Tapahtuma (luokka) -olio on ihan yksinkertainen tieto tapahtuman nimestä ajankohdasta ja tärkeydestä. Tapahtumakirjasto (luokka) on HashMap jossa Tapahtuma olioita säilytetään.

    mitään. Tulostaako ohjelma ruudulle vain "null!" ja pysähtyy, eikä tee mitään muuta?

    Äänestä

  • sanoa kirjoitti:

    mitään. Tulostaako ohjelma ruudulle vain "null!" ja pysähtyy, eikä tee mitään muuta?

    catch (IOException ioe) {
       System.out.println(ioe.getMessage());
    }

    tämä antaa null,
    muu ohjelma jatkaa niinkuin ei mitään

    Äänestä

  • sss kirjoitti:

    catch (IOException ioe) {
       System.out.println(ioe.getMessage());
    }

    tämä antaa null,
    muu ohjelma jatkaa niinkuin ei mitään

    koskaan tehdä, vaan:

    catch (IOException ioe) {
    ioe.printStackTrace();
    System.exit(1);
    }

    Siis exceptionista kannattaa aina tulostaa mistä se on lähtöisin, sillä pelkällä viestillä ei paljon ole hyötyä, koska sitä ei edes aina asenneta koska exceptionin nimi kertoo jo mistä on kysy (EOFException, FileNotFoundException, jne.).

    Mainitsemasi EOFException jonka tietenkin IOException catchaa, tulee todennäköisesti readObject riviltä. Viittaisi siihen että yrität lukea väärää tiedostoa tai sitten tiedosto on tyhjä. Näyttääkö teksti editori että siinä tiedostossa olisi jotain mistä luet?

    Äänestä

  • ei kannata kirjoitti:

    koskaan tehdä, vaan:

    catch (IOException ioe) {
    ioe.printStackTrace();
    System.exit(1);
    }

    Siis exceptionista kannattaa aina tulostaa mistä se on lähtöisin, sillä pelkällä viestillä ei paljon ole hyötyä, koska sitä ei edes aina asenneta koska exceptionin nimi kertoo jo mistä on kysy (EOFException, FileNotFoundException, jne.).

    Mainitsemasi EOFException jonka tietenkin IOException catchaa, tulee todennäköisesti readObject riviltä. Viittaisi siihen että yrität lukea väärää tiedostoa tai sitten tiedosto on tyhjä. Näyttääkö teksti editori että siinä tiedostossa olisi jotain mistä luet?

    Joo, tiedosto vaikuttaisi olevan ok.
    Pitää kokeilla tuota printStack:iä

    Äänestä

  • ei kannata kirjoitti:

    koskaan tehdä, vaan:

    catch (IOException ioe) {
    ioe.printStackTrace();
    System.exit(1);
    }

    Siis exceptionista kannattaa aina tulostaa mistä se on lähtöisin, sillä pelkällä viestillä ei paljon ole hyötyä, koska sitä ei edes aina asenneta koska exceptionin nimi kertoo jo mistä on kysy (EOFException, FileNotFoundException, jne.).

    Mainitsemasi EOFException jonka tietenkin IOException catchaa, tulee todennäköisesti readObject riviltä. Viittaisi siihen että yrität lukea väärää tiedostoa tai sitten tiedosto on tyhjä. Näyttääkö teksti editori että siinä tiedostossa olisi jotain mistä luet?

    java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.
    peekByte(ObjectInputStream.java:2502)
    at java.io.ObjectInputSream.
    readObject(ObjectInputStream.java:339)
    at ..kaikki viittaukset lataaTiedosto -metodiin

    Äänestä

  • Tämä onkin mielenkiintoinen juttu kun luokka Tapahtumat jossa ks. hashmap on privat luokkana, ja tämä luokka toteuttaa Serializablen, mutta kääntäjä antaa varoituksen:

    warning: [serial] serializable class Tapahtumat has no definition of serialVersionUID
    public class Tapahtumat implements Serializable {
    ^
    Tapahtumat on siis olio jota voi käyttää ja joka luodaan käyttöliittymä luokassa, (pitääkö tämänkin luokan toteuttaa serializable?)
    Tallennus luokassa yritän tallentaa staattisena kenttänä käyttöliittymässä olevaa (Tapahtumat) kaikki(/nimi) -oliota.
    Mistä voisi löytää tieto miten luokka voi toteuttaa useampia rajapintoja, kun käyttöliittymä implimoi jo ActionListener:n.

    Äänestä

  • sss kirjoitti:

    Tämä onkin mielenkiintoinen juttu kun luokka Tapahtumat jossa ks. hashmap on privat luokkana, ja tämä luokka toteuttaa Serializablen, mutta kääntäjä antaa varoituksen:

    warning: [serial] serializable class Tapahtumat has no definition of serialVersionUID
    public class Tapahtumat implements Serializable {
    ^
    Tapahtumat on siis olio jota voi käyttää ja joka luodaan käyttöliittymä luokassa, (pitääkö tämänkin luokan toteuttaa serializable?)
    Tallennus luokassa yritän tallentaa staattisena kenttänä käyttöliittymässä olevaa (Tapahtumat) kaikki(/nimi) -oliota.
    Mistä voisi löytää tieto miten luokka voi toteuttaa useampia rajapintoja, kun käyttöliittymä implimoi jo ActionListener:n.

    Nyt sain sen Exceptionin, se ei olekaan IOException vaan java.io.EOFException..
    end of file..
    ei hajuakaan mistä tuo aiheutuu

    Äänestä

  • sss kirjoitti:

    Tämä onkin mielenkiintoinen juttu kun luokka Tapahtumat jossa ks. hashmap on privat luokkana, ja tämä luokka toteuttaa Serializablen, mutta kääntäjä antaa varoituksen:

    warning: [serial] serializable class Tapahtumat has no definition of serialVersionUID
    public class Tapahtumat implements Serializable {
    ^
    Tapahtumat on siis olio jota voi käyttää ja joka luodaan käyttöliittymä luokassa, (pitääkö tämänkin luokan toteuttaa serializable?)
    Tallennus luokassa yritän tallentaa staattisena kenttänä käyttöliittymässä olevaa (Tapahtumat) kaikki(/nimi) -oliota.
    Mistä voisi löytää tieto miten luokka voi toteuttaa useampia rajapintoja, kun käyttöliittymä implimoi jo ActionListener:n.

    eli ei pitäisi edes haitata. "has no definition of serialVersionUID" näyttäis siltä, että pitäis olla tollanen staattinen muuttuja luokassa, joka kertoo millä versiolla serialisointi on tehty. Eti googlesta.

    Sen luokan pitää toteuttaa serializable, jota yrität sinne tiedostoon laittaa. Jos tiedostoon laitetaan Tapahtuma-olio, niin sitten Tapahtuman pitää toteuttaa se.

    Implementointi onnistuu ihan vaan erottamalla toteutettavat rajapinnat pilkuilla.

    public class Tapahtuma extends Jotain implements Serializable, ActionListener{

    //luokan koodi
    }

    Äänestä

  • sss kirjoitti:

    Nyt sain sen Exceptionin, se ei olekaan IOException vaan java.io.EOFException..
    end of file..
    ei hajuakaan mistä tuo aiheutuu

    EOF tulee kun tiedosto loppuu. Se ei vielä tarkoita, että homma olisi mennyt pipariksi. Jatka vaan eteenpäin, katso mitä olet saanut tiedostosta luetuksi.

    Veikkaan, että yrität lukea olioita silmukassa. Kun tiedoston viimeinen olio on luettu, ei voida lukea enempää, jolloin tulee EOF. Tämä ei ole "virhe" sinänsä, vaan exception kertoo että tiedostossa ei ole enää mitään luettavaa. Kaikki mahdolliset oliot on jo luettu.

    Äänestä

  • fani__ kirjoitti:

    EOF tulee kun tiedosto loppuu. Se ei vielä tarkoita, että homma olisi mennyt pipariksi. Jatka vaan eteenpäin, katso mitä olet saanut tiedostosta luetuksi.

    Veikkaan, että yrität lukea olioita silmukassa. Kun tiedoston viimeinen olio on luettu, ei voida lukea enempää, jolloin tulee EOF. Tämä ei ole "virhe" sinänsä, vaan exception kertoo että tiedostossa ei ole enää mitään luettavaa. Kaikki mahdolliset oliot on jo luettu.

    Hmhmhmhmhhhm!
    Tulin just ks. tentistä!
    Kurssin lopputyötä teen.
    Kiitos jo vastanneille!
    Jostain syystä tiedostosta ei tule siltikään tietoa!
    muutamia arvauksia tässä: (kertokaa jos joku voi pitää paikkaansa)
    -ObjectInput/OutputStream on asetettu nulliksi kentässä, ei konstruktorissa

    -Luon HashMap:n aina uudestaan ohjelman käynnistyessä, ja tiedot eivät mene sinne siksi (Luokka.tapahtumat = new Tapahtumat();
    Luokka.tapahtumat.lataaTapahtumat(); )

    -Ohjelma on 8luokkainen ja jokin niistä ei implikoi serializablea vaikka pitäisi

    -jokin muu


    ps. En lataa olioita silmukassa, tallennus vain suljettaessa, lataus vain käynnistyksessä

    Äänestä

  • Piru kirjoitti:

    eli ei pitäisi edes haitata. "has no definition of serialVersionUID" näyttäis siltä, että pitäis olla tollanen staattinen muuttuja luokassa, joka kertoo millä versiolla serialisointi on tehty. Eti googlesta.

    Sen luokan pitää toteuttaa serializable, jota yrität sinne tiedostoon laittaa. Jos tiedostoon laitetaan Tapahtuma-olio, niin sitten Tapahtuman pitää toteuttaa se.

    Implementointi onnistuu ihan vaan erottamalla toteutettavat rajapinnat pilkuilla.

    public class Tapahtuma extends Jotain implements Serializable, ActionListener{

    //luokan koodi
    }

    public static final long serialVersionUID = 42L;
    -tämä kentäksi ni warning lähti mutta varsinainen ongelma jäi;

    Toinenkin warningi:
    warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList
    this.tapahtuu.get(koodi).add(kohta, uusi);

    tämä tulee tällasesta paikasta:

    //METODI LISÄÄ UUDEN TAPAHTUMAN MÄPPIIN

    public void lisaaTapahtuma(String koodi, Tapahtuma uusi) {

       //MERKITSEE LISTAN
       ArrayList lista;

       //TUTKITAAN ONKO PÄIVÄLLE JO TIETOJA(jos ei niin tallennetaan)
       if(this.tapahtuu.get(koodi) == null) {
        lista = new ArrayList();
        lista.add(uusi);
        this.tapahtuu.put(koodi, lista);
       }
       else {
        //(jos on niin asetetaan tapahtumat tärkeysjärjestykseen)
        int kohta = uusi.priorisoi();

        if(uusi.priorisoi() > this.tapahtuu.get(koodi).size()) {
          kohta--;
        }

        if(kohta < 0)
          kohta = 0;

        this.tapahtuu.get(koodi).add(kohta, uusi); //TÄSSÄ ON VAROITUS;
       }
    }

    Tämä minun ymmärrykseni mukaan tarkoittaa että ArrayListiä ei ole luotu (pakosta) niin se luulee että se on tyhjä. Mutta kuten koodista näkee että Lista on olemassa jos mennään käskyn sisältävään if lauseeseen.
    Jos meni *tuilleen niin ok.
    Miten korjata, vai tarviiko edes?

    Äänestä

  • sss kirjoitti:

    Hmhmhmhmhhhm!
    Tulin just ks. tentistä!
    Kurssin lopputyötä teen.
    Kiitos jo vastanneille!
    Jostain syystä tiedostosta ei tule siltikään tietoa!
    muutamia arvauksia tässä: (kertokaa jos joku voi pitää paikkaansa)
    -ObjectInput/OutputStream on asetettu nulliksi kentässä, ei konstruktorissa

    -Luon HashMap:n aina uudestaan ohjelman käynnistyessä, ja tiedot eivät mene sinne siksi (Luokka.tapahtumat = new Tapahtumat();
    Luokka.tapahtumat.lataaTapahtumat(); )

    -Ohjelma on 8luokkainen ja jokin niistä ei implikoi serializablea vaikka pitäisi

    -jokin muu


    ps. En lataa olioita silmukassa, tallennus vain suljettaessa, lataus vain käynnistyksessä

    Voisiko olla, kun nyt luin vähän ulkopuolisen silmin että koska tuossa Tapahtumat luokassa konstruktorissa ei luoda uutta ArrayListiä ni niillä tallennetuilla tapahtumilla ei ole paikkaa minne mennä?

    Äänestä

  • sss kirjoitti:

    public static final long serialVersionUID = 42L;
    -tämä kentäksi ni warning lähti mutta varsinainen ongelma jäi;

    Toinenkin warningi:
    warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList
    this.tapahtuu.get(koodi).add(kohta, uusi);

    tämä tulee tällasesta paikasta:

    //METODI LISÄÄ UUDEN TAPAHTUMAN MÄPPIIN

    public void lisaaTapahtuma(String koodi, Tapahtuma uusi) {

       //MERKITSEE LISTAN
       ArrayList lista;

       //TUTKITAAN ONKO PÄIVÄLLE JO TIETOJA(jos ei niin tallennetaan)
       if(this.tapahtuu.get(koodi) == null) {
        lista = new ArrayList();
        lista.add(uusi);
        this.tapahtuu.put(koodi, lista);
       }
       else {
        //(jos on niin asetetaan tapahtumat tärkeysjärjestykseen)
        int kohta = uusi.priorisoi();

        if(uusi.priorisoi() > this.tapahtuu.get(koodi).size()) {
          kohta--;
        }

        if(kohta < 0)
          kohta = 0;

        this.tapahtuu.get(koodi).add(kohta, uusi); //TÄSSÄ ON VAROITUS;
       }
    }

    Tämä minun ymmärrykseni mukaan tarkoittaa että ArrayListiä ei ole luotu (pakosta) niin se luulee että se on tyhjä. Mutta kuten koodista näkee että Lista on olemassa jos mennään käskyn sisältävään if lauseeseen.
    Jos meni *tuilleen niin ok.
    Miten korjata, vai tarviiko edes?

    Vastaan tähän väliin kun et varmaan enää lue tuota ekaa haaraa jossa olen huudellut. Se EOFException tulee yleensä sen readObject komennon yhteydessä silloin kun tiedosto on vioittunut tai objektia ei ole tallennettu oikein tai se luetaan väärin.

    Mainitsemasi varoitus viittaa siihen että et ole kertonut ihan oikein mitä luokkia tapahtuu -olio (eli HashMap) käyttää, jonka takia kääntäjä antaa varoituksen. Tapahtuu olion määritelmän pitäisi olla seuraavanlainen:

    private HashMap tapahtuu;

    Se virhe voi johtua myös tästä yllä olevasta seikasta. Tai sitten Tapahtuma luokassa voi olla joku koodaus virhe jolloin serialisointi ei onnistu (mutta sen kyllä huomaisi todennäköisesti printStackTrace:n tulosteesta).

    Syy voi olla myös tiedoston käsittelyssäsi, eli jos et tee flush toimintoa ObjectOutputStream oliollesi ennen sulkemista ja suljet vain FileOutputStream:n, niin tällöin kaikkea ei tallennu tiedostoon ja silloin tulee EOFException luettaessa. Itse sain näin ainakin generoitua EOFExceptionin. Käytätkö kirjoituksessa myös BufferedOutputStream luokkaa? Niin ja jos sama ohjelma kirjoittaa ja lukee sinne niin kai olet muistanut sulkea sen tiedoston mihin se kirjoitettaan?

    Äänestä

  • väliin. kirjoitti:

    Vastaan tähän väliin kun et varmaan enää lue tuota ekaa haaraa jossa olen huudellut. Se EOFException tulee yleensä sen readObject komennon yhteydessä silloin kun tiedosto on vioittunut tai objektia ei ole tallennettu oikein tai se luetaan väärin.

    Mainitsemasi varoitus viittaa siihen että et ole kertonut ihan oikein mitä luokkia tapahtuu -olio (eli HashMap) käyttää, jonka takia kääntäjä antaa varoituksen. Tapahtuu olion määritelmän pitäisi olla seuraavanlainen:

    private HashMap tapahtuu;

    Se virhe voi johtua myös tästä yllä olevasta seikasta. Tai sitten Tapahtuma luokassa voi olla joku koodaus virhe jolloin serialisointi ei onnistu (mutta sen kyllä huomaisi todennäköisesti printStackTrace:n tulosteesta).

    Syy voi olla myös tiedoston käsittelyssäsi, eli jos et tee flush toimintoa ObjectOutputStream oliollesi ennen sulkemista ja suljet vain FileOutputStream:n, niin tällöin kaikkea ei tallennu tiedostoon ja silloin tulee EOFException luettaessa. Itse sain näin ainakin generoitua EOFExceptionin. Käytätkö kirjoituksessa myös BufferedOutputStream luokkaa? Niin ja jos sama ohjelma kirjoittaa ja lukee sinne niin kai olet muistanut sulkea sen tiedoston mihin se kirjoitettaan?

    Joo, totta oli että ArrayList piti määritellä paremmin.
    Tämä tallennus luokka on melko ylivoimasen iso juttu minun peruskurssi tiedoille: onneksi apista on jotain apua mutta; tässäpä olisi vähän mietittävää, lisäsin juuri sen huuhtelun, mutten ole ihan varma miten oikein se on. Tiedoston sulkemisesta, no ainakin ne virrat on suljettu: miepä laitan tallennusluokan konstruktorin ja metodit tähän: Toivottavasti kukaan ei loukkaa itseään. =)

    //KONSTRUKTORI
    public Tallennus() {
    this.save = null;
    try {
    this.save =
    new ObjectOutputStream(new FileOutputStream("dateplan.tmp"));
    }
    catch(IOException luotallenna) {
    System.out.println("Virhe tallennus tiedoston luomisessa");
    }

    this.load = null;
    try {
    this.load =
    new ObjectInputStream(new FileInputStream("dateplan.tmp"));
    }
    catch(IOException luolataa) {
    System.out.println("Virhe lataus tiedoston luomisessa");
    }
    }
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    //TALLENNUS METODI
    public void tallennaTiedot() {

    //TALLENNETAAN TIEDOT
    try {
    this.save.writeObject(Kalenteri.kaikki);
    }
    catch(IOException tallennus) {
    System.out.println("Virhe tiedoston tallennuksessa");
    }

    //FLUSH?
    try {
    this.save.flush();
    }
    catch(IOException huuhdo) {
    System.out.println("Virhe virran huuhtomisessa!");
    }

    //SULJETAAN TIEDOSTO
    try {
    if(this.save != null)
    this.save.close();
    }
    catch(IOException sulkemis) {
    System.out.println("Virhe tiedoston sulkemisessa");
    }
    }
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    //LATAUS METODI
    public void lataaTiedot() {

    //LADATAAN TIEDOT
    try {
    Kalenteri.kaikki = (Tapahtumat) this.load.readObject();
    }
    catch(IOException ioe) {
    ioe.printStackTrace();
    }

    catch(ClassNotFoundException eiloydy) {
    System.out.println("Tarvittaavaa luokkaa ei löydy");
    }

    //SULJETAAN TIEDOSTO
    try {
    if(this.load != null)
    this.load.close();
    }
    catch(IOException sulje) {
    System.out.println("Virhe tiedoston sulkemisessa");
    }
    }
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Että tämmönen.
    Ei siinä pitäs vikkaa olla(ainakaan opinto monisteitten mukaan =) ).

    Äänestä

  • sss kirjoitti:

    Joo, totta oli että ArrayList piti määritellä paremmin.
    Tämä tallennus luokka on melko ylivoimasen iso juttu minun peruskurssi tiedoille: onneksi apista on jotain apua mutta; tässäpä olisi vähän mietittävää, lisäsin juuri sen huuhtelun, mutten ole ihan varma miten oikein se on. Tiedoston sulkemisesta, no ainakin ne virrat on suljettu: miepä laitan tallennusluokan konstruktorin ja metodit tähän: Toivottavasti kukaan ei loukkaa itseään. =)

    //KONSTRUKTORI
    public Tallennus() {
    this.save = null;
    try {
    this.save =
    new ObjectOutputStream(new FileOutputStream("dateplan.tmp"));
    }
    catch(IOException luotallenna) {
    System.out.println("Virhe tallennus tiedoston luomisessa");
    }

    this.load = null;
    try {
    this.load =
    new ObjectInputStream(new FileInputStream("dateplan.tmp"));
    }
    catch(IOException luolataa) {
    System.out.println("Virhe lataus tiedoston luomisessa");
    }
    }
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    //TALLENNUS METODI
    public void tallennaTiedot() {

    //TALLENNETAAN TIEDOT
    try {
    this.save.writeObject(Kalenteri.kaikki);
    }
    catch(IOException tallennus) {
    System.out.println("Virhe tiedoston tallennuksessa");
    }

    //FLUSH?
    try {
    this.save.flush();
    }
    catch(IOException huuhdo) {
    System.out.println("Virhe virran huuhtomisessa!");
    }

    //SULJETAAN TIEDOSTO
    try {
    if(this.save != null)
    this.save.close();
    }
    catch(IOException sulkemis) {
    System.out.println("Virhe tiedoston sulkemisessa");
    }
    }
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    //LATAUS METODI
    public void lataaTiedot() {

    //LADATAAN TIEDOT
    try {
    Kalenteri.kaikki = (Tapahtumat) this.load.readObject();
    }
    catch(IOException ioe) {
    ioe.printStackTrace();
    }

    catch(ClassNotFoundException eiloydy) {
    System.out.println("Tarvittaavaa luokkaa ei löydy");
    }

    //SULJETAAN TIEDOSTO
    try {
    if(this.load != null)
    this.load.close();
    }
    catch(IOException sulje) {
    System.out.println("Virhe tiedoston sulkemisessa");
    }
    }
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Että tämmönen.
    Ei siinä pitäs vikkaa olla(ainakaan opinto monisteitten mukaan =) ).

    No seuraavaksi voisit avata luodun tiedoston millä tahansa tekstieditorilla. Onko tiedosto tyhjä, vai sisältääkö se "roskaa", eli serialisoidun olion?

    Jos se sisältää olion (tai olioita), voisit kokeilla lukea olioita ilman castauksia. Eli tee metodi, joka lukee mitä tahansa olioita tiedostosta. Kokeilumielessä voit lukea kaikki tiedoston oliot ja tulostaa niiden luokat. Näin saat tietää mitä tiedostossa loppujen lopuksi on.

    Ja tulosta exceptionit kokonaisuudessaan. Ei siis: catch(IOException luotallenna) {
    System.out.println("Virhe tallennus tiedoston luomisessa");
    }

    vaan esim:

    catch(IOException luotallenna) {
    System.out.println("Tallennuksen konstruktorissa: " luotallenna.toString() " Virhe tallennus tiedoston luomisessa");
    }

    Äänestä

  • sss kirjoitti:

    public static final long serialVersionUID = 42L;
    -tämä kentäksi ni warning lähti mutta varsinainen ongelma jäi;

    Toinenkin warningi:
    warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList
    this.tapahtuu.get(koodi).add(kohta, uusi);

    tämä tulee tällasesta paikasta:

    //METODI LISÄÄ UUDEN TAPAHTUMAN MÄPPIIN

    public void lisaaTapahtuma(String koodi, Tapahtuma uusi) {

       //MERKITSEE LISTAN
       ArrayList lista;

       //TUTKITAAN ONKO PÄIVÄLLE JO TIETOJA(jos ei niin tallennetaan)
       if(this.tapahtuu.get(koodi) == null) {
        lista = new ArrayList();
        lista.add(uusi);
        this.tapahtuu.put(koodi, lista);
       }
       else {
        //(jos on niin asetetaan tapahtumat tärkeysjärjestykseen)
        int kohta = uusi.priorisoi();

        if(uusi.priorisoi() > this.tapahtuu.get(koodi).size()) {
          kohta--;
        }

        if(kohta < 0)
          kohta = 0;

        this.tapahtuu.get(koodi).add(kohta, uusi); //TÄSSÄ ON VAROITUS;
       }
    }

    Tämä minun ymmärrykseni mukaan tarkoittaa että ArrayListiä ei ole luotu (pakosta) niin se luulee että se on tyhjä. Mutta kuten koodista näkee että Lista on olemassa jos mennään käskyn sisältävään if lauseeseen.
    Jos meni *tuilleen niin ok.
    Miten korjata, vai tarviiko edes?

    ArrayList temp = this.tapahtuu.get(koodi);
    temp.add(kohta, uusi);

    Äänestä

Ongelma löytyi! =)

Konstruktorissa olleet this.save = new...
this.load = new...
pitikin siirtää metodiensa (lataaTiedosto() , tallennaTiedosto() alle!)
Koko hommeli toimii ja mulla alkoi vihdoinkin kesäloma!!!
Jezzzz!

Ja kiiros kaikille vastanneille.

Äänestä

Kommentoi aloitusta


sss kirjoitti:

Minulla on HashMap olion sisältävä luokka joka pitäisi tallentaa, ja pystyä lataamaan, olen yrittänyt Object(In\Out)putStream:n avulla, mutta jostain syystä tiedostoa ei pysty lataamaan, -kyseessä on IOException, mutta minulla ei ole hajuakaan mistä se tulee?
-ArrayList sisältää Tapahtuma -olioita;

Miksiköhän tuo (Tapahtuma kirjasto) luokka antaa varoituksen Serializable:sta??

prkle kun ei missään ole oikeita virheitä ni ei voi edes arvaamalla yrittää!!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu