Olioiden tallentaminen ja lukeminen

sss

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ää!!

20

1214

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Out..

      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... :-)

      • sss

        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.


      • sanoa
        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?


      • sss
        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


      • ei kannata
        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?


      • sss
        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ä


      • sss
        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


    • zustus
      • sss

        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.


      • sss
        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


      • Piru
        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
        }


      • fani__
        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.


      • sss
        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ä


      • sss
        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?


      • sss
        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ä?


      • väliin.
        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?


      • sss
        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 =) ).


      • fani__
        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");
        }


      • fani__
        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);


    • sss

      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.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Persujen mukaan rasismi on huumoria

      Vaan kun koomikko kutsui Halla-ahoa fasistiksi, niin piti haastaa oikeuteen. Mihin se huumorinitaju yhtäkkiä hävisi? ⠀
      Maailman menoa
      151
      4763
    2. BOIKOTOIN - Ei mitään Suomi.fi postilaatikoita käyttöön

      Ainakaan minulle! Vai että pitäisi alkaa siellä käyädä katselemassa tammikuusta 2026 siis periaatteessa päivittäin että
      Maailman menoa
      205
      3984
    3. 212
      3188
    4. Lasse Lehtonen vaatii persuja pyytämään anteeksi aasialaisilta

      Persut ova romahduttaneet Suomen maakuvan parissa päivässä negatiiviseksi rasismillaan ja se alkaa vaikuttamaan jo Suome
      Maailman menoa
      109
      3049
    5. Hallitus on kaadettava ja Orpon on erottava

      Mikään muu hallitus ei ole oman elämäni aikana tuhonnut näin paljon tämän maan taloutta ja työllisyyttä sekä suomen main
      Maailman menoa
      84
      2873
    6. Lasse Lehtonen palasi ambulanssilennolla Suomeen

      Nyt on syytä lopettaa irvailu.
      Maailman menoa
      125
      1720
    7. HS 12/25 kysely: persut romahti, demarit raketoi

      Kyyti on kylmää persuleirissä, saattaa vetää siellä silmätkin viirulleen. Sen sijaan SDP:n puoluetoimistolla voidaan pok
      Maailman menoa
      12
      1625
    8. 61
      1329
    9. Aitolehti Capital

      HehkuB on myynnissä, kovalla työllä saavutettu unelma joka sekin lässähti kuten kaikki mihin ryhtyy! Nyt Sewen asialle
      Kotimaiset julkkisjuorut
      247
      1176
    10. MOT: Työmarkkinatori on olemattomien työpaikkojen hakupaikka

      Työpaikkojen tietoja ei tarkisteta, ja ainakin noin noin 10% on olemattomia työpaikkoja ja sen lisäksi eri rekryfirmat t
      Maailman menoa
      149
      1145
    Aihe